Последовательность или порядок изменения миграции Rails

Я написал несколько миграций для своего приложения Rails 3, но хотел бы изменить порядок миграций. Как я могу изменить порядок или последовательность миграции? Это так же просто, как переименовать файл миграции с отметкой времени?

Я знаю, что это странный вопрос, но в основном я испортил свои миграции и удалил некоторые старые миграции, и теперь мне нужно удалить таблицу, прежде чем создавать новую. Я также знаю, что могу включить оператор drop в миграцию create-the-new-table, но мне любопытно узнать, как изменить порядок миграции.


person Ryan    schedule 04.05.2012    source источник


Ответы (3)


Да, он запускает миграции, которые не были запущены в порядке префикса. В более ранних версиях рельсов, может быть, 2.1 или 2.2, они нумеровались, начиная с 01, но они переключились на временные метки.

Существует таблица, в которой отслеживаются выполненные миграции. Намерения состоят в том, что несколько разработчиков добавили миграции и позже проверили их в системе контроля версий. Таким образом, может быть миграция, которая не выполнялась, но имеет номер перед миграцией с наибольшим номером, которая выполнялась.

Если вы измените последовательность миграции (а у меня так и есть), лучше использовать первую версию перед всеми миграциями, которые вы повторно упорядочиваете. Используйте опцию VERSION с db:migrate. Если миграция с наибольшим номером, которую вы хотите сохранить (не запустить вниз), имеет номер 20120318143249, назовите ее так.

rake db:migrate VERSION=20120318143249

Я часто запускаю миграцию и запускаю ее повторно, пока не получу подробные сведения о миграции, которые меня удовлетворят. Иногда я их переупорядочиваю, когда хочу поработать над одним из них, и хочу, чтобы оно было последним.

person Marlin Pierce    schedule 04.05.2012

Да, префикс имени файла определяет порядок выполнения. Однако имейте в виду, что это изменит вашу текущую систему только в том случае, если вы очистите свою БД / начнете заново.

person Mitch Dempsey    schedule 04.05.2012
comment
Не всегда верно. Предполагая, что более поздние миграции обратимы, вы можете rake db:migrate VERSION=<specific timestamp>, как предложил @Marlin-Pierce - person varleti; 13.07.2016

У меня была аналогичная проблема, потому что миграции происходили не в правильном порядке. Прочитав ответ Митча, я решил переименовать миграции, чтобы упорядочить даты так, как мне нужно. После этого исправления я запустил rails db:migrate, и это сработало. Не самое элегантное решение, но оно сработало, поэтому я решил поделиться им.

person Nico Rithner    schedule 21.02.2021