Ruby on rails 尝试将Rails设置为在Postgresql数据库中存储会话

Ruby on rails 尝试将Rails设置为在Postgresql数据库中存储会话,ruby-on-rails,postgresql,activerecord,ruby-on-rails-3.2,Ruby On Rails,Postgresql,Activerecord,Ruby On Rails 3.2,我有一个现有的Rails 3.2应用程序,我想将会话存储在Postgresql数据库中。我在Stackoverflow上找到了,并按照迭戈·皮诺的指示行事 但是,当我进入rakedb:migrate步骤时,我得到了以下错误: PG::错误:错误:外键约束“sessions\u session\u id\u fkey”无法实现详细信息:键列“session\u id”和“id”的类型不兼容:字符变化和整数 下面是它试图执行的SQL: CREATE TABLE "sessions" ("id" se

我有一个现有的Rails 3.2应用程序,我想将会话存储在Postgresql数据库中。我在Stackoverflow上找到了,并按照迭戈·皮诺的指示行事

但是,当我进入
rakedb:migrate
步骤时,我得到了以下错误:

PG::错误:错误:外键约束“sessions\u session\u id\u fkey”无法实现详细信息:键列“session\u 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
在取消底部的
:active\u record\u store
行的注释后,我尝试重新运行
rake db:migrate
命令,但这并没有改变结果


在我的开发或测试数据库中,我也没有一个现有的会话表。

查看生成的SQL,这跳出来:

FOREIGN KEY ("session_id") REFERENCES "sessions" ("id"))
您的表名为
sessions
,但它引用的是另一个名为
sessions
的表。出于某种原因,它表示此表中的
session\u id
列是名为
sessions
的表中
id
列的外键

因此,很明显,它不能将会话表中的
session\u id
列作为同一表中
id
列的外键,因为错误告诉您:

Key columns "session_id" and "id" are of incompatible types: character varying and integer.
根据以下文件:

由活动记录类支持的会话存储。提供了一个默认类,但任何对象都可以使用文本会话id和数据属性输入到活动记录会话类

以下是该页面的链接:


你能发布你的
/config/initializers/session_store.rb
文件的内容吗?

我用安德鲁的建议检查了图书馆的文档,下面是我问题的根源:

SchemaPlus增加了对外键约束的支持。事实上,对于使用后缀_id命名列以指示其为外键的常见约定,SchemaPlus会自动定义相应的约束


谢天谢地,这种行为可以通过使用
:references=>nil
设置在迁移中被覆盖。查看以获取更多信息。

您是否有自动添加外键的gems?请发布
/config/initializers/session_store.rb
我正在使用schema_plus,但我不知道它是否自动添加外键。我现在来查一查,安德鲁是对的。问题是我使用的是schema_plus,如果字段以“_id”结尾,它会自动尝试将其作为外键。谢天谢地,schema_plus还可以覆盖此行为。我知道这只是一个输入错误,但您可能应该在迁移到
t.text:data
AddSessionTable
中更新
t.text:date
。只是一个观察。谢谢凯文,我用那个文件的内容更新了我上面的问题。我已经有了“会话”控制器和视图,但没有模型。我在前面创建了这些,以帮助管理会话。这些文件会导致这些问题吗?感谢Kevin的所有见解,但它最终成为我使用的schema_plus库的一个功能。
Key columns "session_id" and "id" are of incompatible types: character varying and integer.