Миграция Ruby Sequel выполняется, но не удается добавить столбцы
Я использую дополнение Heroku Postgres для моей БД (базовая версия). Ruby Sequel - это мой ORM для управления схемами.
В последнее время некоторые миграции не обновили схему БД.
Я запускаю миграцию 19, 019_add_last_unique_story_to_user.rb:
Sequel.migration do
up do
alter_table(:state_tables) do
add_column :last_unique_story, Integer, default: 0
add_column :last_unique_story_read?, TrueClass, default: true
end
end
down do
alter_table(:state_tables) do
drop_column :last_unique_story
drop_column :last_unique_story_read?
end
end
end
Это обновляет DB[:schema_info] с версии 18 до 19, но столбцы в таблицу:state_table не добавляются. Эта проблема существует как для производственных, так и для локальных баз данных. Я попытался мигрировать несколько раз и проверил, что URL базы данных был правильным.
Мое быстрое исправление: я скопировал и вставил приведенный выше код в 20-ю миграцию, 020_test.rb, и выполнил свою задачу миграции рейка rake db:migrate:up
, Это успешно обновило базу данных.
Кто-нибудь знает, что здесь может происходить? Почему некоторые миграции выполняются успешно, обновляют версию миграции, но не обновляют столбцы? Может ли это быть проблема с именами, проблема с кэшированием или проблема с Heroku? Спасибо за помощь!
1 ответ
Это зависит от того, как написано ваше задание по рейку. Сиквел не отправляет рейк-задания, поэтому вам нужно проверить, откуда вы получили рейк-задание.
В общем, единственная причина, по которой миграция не добавит столбец, заключается в том, что миграция не была запущена. Например, если версия схемы в базе данных уже 19, то при миграции вы не запустите миграцию 19. Это объясняет, почему он запустил миграцию, когда вы скопировали ее в миграцию 20, а затем перенесли. Если вы запустите мигратор с помощью регистратора базы данных, Sequel будет регистрировать действия по миграции (в дополнение к SQL).