Rails 4 как игнорировать ожидающие миграции
Проблема следующая:
- У меня есть db/seed.rb, полное исходных данных.
- Одна из миграций зависит от данных, которые предоставляет семя.
- Я пытаюсь развернуть свое приложение из пустого db.
Результат:
- RAILS_ENV = производственный грабли db: migrate - не удается из-за отсутствия исходных данных
- RAILS_ENV = производственный грабли db: семя - не удается из-за ожидающих миграции
Я хотел как-то сказать rake игнорировать ожидающие миграции, но не смог сделать это до сих пор.
ОБНОВЛЕНИЕ (из-за дополнительного опыта)
Иногда миграция и код модели не синхронизируются, поэтому миграции не выполняются.
Чтобы избежать этой проблемы, недавно использовалось переопределение модели при миграции:
# reset all callbacks, hooks, etc for this model
class MyAwesomeModel < ActiveRecord::Base
end
class DoSomethingCool < ActiveRecord::Migration
def change
...
end
end
Ответы
Ответ 1
Rails сохраняет информацию о миграции в таблице с именем schema_migrations
.
Вы можете добавить версию из своей миграции в эту таблицу, чтобы пропустить конкретную миграцию.
Версия представляет собой числовую строку, которая предшествует описанию в имени файла.
[version]_Create_Awesome.rb
Ответ 2
Я не очень уверен, что это поможет вам. Но я искал что-то и нашел этот вопрос. Поэтому похоже, что это может помочь:
В RAILS_ROOT/config/environment/development.rb
Установите для следующей установки значение false:
config.active_record.migration_error = false#:page_load
В моей ситуации он теперь больше не отображает ожидающую миграционную ошибку. Должен работать для задач рейка и консоли для той же среды.
Ответ 3
Переименуйте миграцию, зависящую от данных:
20140730091353_migration_name.rb
к
.20140730091353_migration_name.rb
(добавьте точку в начале имени файла)
Затем запустите rake db:seed
(он больше не будет жаловаться на ожидающие миграции), а затем переименуйте миграцию.
Если у вас больше последующих миграций, вы должны переименовать их все или просто переместить их временно.
Ответ 4
Нет никакого способа, если вы обезвредите код Rails. Я настоятельно рекомендую вам исправить ваши миграции.
Миграция не должна зависеть от наличия некоторых данных в базе данных. Это может зависеть от предыдущей миграции, но, конечно, совсем не по данным на db.
Ответ 5
У меня была аналогичная проблема. Я прокомментировал строки add_column и запустил команду rake db: migrate, а затем удалил комментарий, когда мне это понадобится для тестовой или производственной среды.