Подтвердить что ты не робот

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
4b9b3361

Ответ 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, а затем удалил комментарий, когда мне это понадобится для тестовой или производственной среды.