我有一个现有的 Rails 3.2 应用程序,我想将会话存储在 Postgresql 数据库中。我在 Stackoverflow 上找到了本教程,并按照 Diego Pino 的指示进行操作。
但是,当我到达该rake db:migrate
步骤时,出现以下错误:
PG::Error: 错误:无法实现外键约束“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
我的开发或测试数据库中也没有现有表。sessions