Миграция 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).

Другие вопросы по тегам