У меня есть существующее приложение Rails 3.2, и я хотел бы хранить сеансы в базе данных Postgresql. Я нашел это руководство в Stackoverflow и следовал указаниям Диего Пино.
Однако, когда я дошел до шага 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
ни в моей базе данных Dev, ни в базе данных Test.
/config/initializers/session_store.rb
- person Kevin Bedell   schedule 17.05.2012t.text :date
при переходе сAddSessionsTable
наt.text :data
. Просто наблюдение. - person Dom   schedule 05.08.2012