Я думаю, что вы должны исправить ошибочные миграции, чтобы они были менее хрупкими, я бы предположил, что пары if
операторов и, возможно, rescue
будет достаточно.
Но, если исправить миграциина самом деле это не вариант, вы можете подделать его различными способами.Прежде всего, вы можете просто закомментировать методы миграции, запустить rake db:migrate
, а затем раскомментировать (или отменить) ошибочную миграцию.
Вы также можете подделать ее внутри базы данных, но этот вид чиканерства не являетсярекомендуется, если вы не знаете, что делаете, и не возражаете против ручного исправления ошибок, когда вы (неизбежно) совершаете ошибку.В вашей базе данных есть таблица с именем schema_migrations
, в которой есть один столбец varchar(255)
с именем version
;эта таблица используется db:migrate
для отслеживания примененных миграций.Все, что вам нужно сделать, это ВСТАВИТЬ соответствующее значение version
, и rake db:migrate
будет думать, что миграция завершена.Найдите поврежденный файл миграции:
db/migrate/99999999999999_XXXX.rb
, затем перейдите в базу данных и скажите:
insert into schema_migrations (version) values ('99999999999999');
, где 99999999999999
, конечно, число из имени файла миграции.Затем запуск rake db:migrate
должен пропустить эту миграцию.
Я бы выбрал второй вариант перед третьим, я включаю только параметр "hack schema_versions
" для полноты.