我有一个现有的Rails 3.2应用程序,我希望将会话存储在Postgresql数据库中。我在Stackoverflow上找到了本教程,并遵循了迭戈·皮诺的指示。
但是,当我进入rake db:migrate步骤时,我得到了以下错误:
错误:错误:外键约束"sessions_session_id_fkey“不能详细实现:键列"session_id”和"id“是不兼容的类型:字符变化和整数。
下面是它试图执行的SQL:
CREATE TABLE "sessions" ("id" serial primary key,
"session_id" character varying(255) NOT NULL,
"data" text,
"created_at" timestamp NOT NULL,
"updated_at" timestamp NOT NULL,
FOREIGN KEY ("session_id") REFERENCES "sessions" ("id"))下面是自动创建的迁移:
class AddSessionsTable < ActiveRecord::Migration
def change
create_table :sessions do |t|
t.string :session_id, :null => false
t.text :date
t.timestamps
end
add_index :sessions, :session_id
add_index :sessions, :updated_at
end
end让我感到困惑的是,在迁移中没有看到任何外键约束声明。那么,为什么生成的sql试图将文本字段和整数字段链接在一起?
更新1
凯文请求我的config/initializers/session_store.rb文件的内容:
# Be sure to restart your server when you modify this file.
Calliope::Application.config.session_store :cookie_store, key: '_calliope_session'
# Use the database for sessions instead of the cookie-based default,
# which shouldn't be used to store highly confidential information
# (create the session table with "rails generate session_migration")
#Calliope::Application.config.session_store :active_record_store在删除底部的rake db:migrate行注释后,我尝试重新运行:active_record_store命令,但这并没有改变结果。
我还做了,而不是,在Dev或测试数据库中都有一个现有的sessions表。
发布于 2012-05-19 17:52:19
发布于 2012-05-17 02:40:43
查看生成的SQL,这会跳出:
FOREIGN KEY ("session_id") REFERENCES "sessions" ("id"))您的表名是sessions,但它引用的是另一个名为sessions的表。出于某种原因,它指示该表中的session_id列是名为sessions的表中的id列的外键。
因此很明显,它不能使会话表中的session_id列成为同一表中id列的外键--正如错误告诉您的:
Key columns "session_id" and "id" are of incompatible types: character varying and integer.根据ActiveRecord::SessionStore的文档
由活动记录类支持的会话存储。提供了一个默认类,但是任何带有文本session_id和数据属性的活动记录会话类的对象鸭类型都足够了。
以下是到该页面的链接:
http://apidock.com/rails/ActiveRecord/SessionStore
你能张贴你的/config/initializers/session_store.rb文件的内容吗?
https://stackoverflow.com/questions/10629054
复制相似问题