Должны ли мои миграции Rails быть обратимыми к началу?

Является ли плохой практикой то, что я не записываю шаги необратимой миграции, такие как команды drop_table? Должны ли миграции быть полностью обратимыми?


person picardo    schedule 28.04.2014    source источник
comment
Оформить заказ stackoverflow.com/questions/621257/   -  person Matheus Santana    schedule 04.02.2016


Ответы (1)


Они «должны» быть обратимыми только в том случае, если вы когда-либо собираетесь обратить вспять один или несколько из них... что, честно говоря, произойдет хотя бы один раз во время вашего развития. Вы всегда должны стремиться к обратимым миграциям, так как вы никогда не знаете, когда они могут вам понадобиться.

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

При этом рельсы предоставляют метод change, который, что касается структуры, во многих случаях предоставляет вам реверс. Однако это работает не во всех ситуациях.

person SnakeWasTheNameTheyGaveMe    schedule 28.04.2014
comment
Для деструктивных миграций, таких как удаление таблиц или столбцов, я обычно не пишу их одновременно с изменением кода. Вместо этого я удаляю модель и вношу все изменения в код, деплою и только через какое-то время отдельно пишу миграцию для очистки данных. Я делаю это партиями и сохраняю резервные копии перед запуском, чтобы быть в большей безопасности. У меня есть внешняя таблица для этой цели. Да, это немного утомительно, но не раз спасало мою задницу. - person gtd; 25.05.2014