Если вы имеете дело с производственными системами , тогда да, это очень плохо. Если это ваш собственный проект с домашним животным, тогда все разрешено (если ничего, это будет опыт обучения :), хотя есть вероятность, что рано или поздно, даже в проекте с домашним животным, вы обнаружите, что поставили крест на отменить миграцию только для того, чтобы отменить миграцию через несколько дней, будь то с помощью rake
или вручную.)
В производственном сценарии вы должны всегда прилагать усилия, чтобы написать и протестировать обратимую миграцию в том случае, если вы пройдете ее в работе, а затем обнаружите ошибку, которая вынуждает откат (схема и схема) к какой-либо предыдущей ревизии (в ожидании какого-либо нетривиального исправления - и к неработающей производственной системе.)
Обратные миграции варьируются от в основном тривиальных (удаление столбцов или таблиц, которые были добавлены во время миграции, и / или изменение типов столбцов и т. Д.) До несколько более сложных (execute
из JOIN
ed INSERT
s или UPDATE
s), но ничто не является настолько сложным, чтобы оправдать "подметание под ковер". Если ничто иное, заставляя себя думать о способах достижения обратных миграций, может дать вам новое понимание самой проблемы, которую решает ваша прямая миграция.
Иногда вы можете столкнуться с ситуацией, когда прямая миграция удаляет функцию, что приводит к удалению данных из базы данных. По очевидным причинам обратная миграция не может реанимировать отброшенные данные. Хотя в таких случаях можно рекомендовать, чтобы прямая миграция автоматически сохраняла данные или сохраняла их в случае отката в качестве альтернативы прямому отказу. (сохранить в yml
, скопировать / переместить в специальную таблицу и т. д.), вам не нужно это делать, поскольку время, необходимое для тестирования такой автоматизированной процедуры, может превысить время, необходимое для восстановления данных вручную (в случае необходимости возникают.) Но даже в таких случаях вместо простого сбоя вы всегда можете сделать условную и временную обратную миграцию условно и временно в ожидании каких-либо действий пользователя (т. е. проверить наличие некоторых необходимых таблицу, которую необходимо восстановить вручную; если она отсутствует, выведите «У меня не получилось, потому что я не могу воссоздать таблицу XYZ
из ничего»; вручную восстановите таблицу XYZ
из резервной копии, затем запустите меня снова, и я вас не подведу! »)