TL; DR
- Если изменение еще не введено в действие, обычно вы можете избежать изменения миграции.
- Рекомендуется сохранять файлы миграции максимально чистыми и ограниченными по количеству и объему.
- Если изменение уже введено в эксплуатацию или если вы изменили его, это усложнит жизнь другим разработчикам, добавьте дополнительные миграции, чтобы исправить ошибочные предыдущие миграции.
- Вы можете быть немного слабее с этими рекомендациями, если вы только добавляете функциональность (возможность отменить миграцию), не меняя того, что первоначально миграция делала.
Полный ответ:
Если вы еще ничего не добавили в удаленный / центральный репозиторий, вы можете делать все, что захотите, в отношении ваших новых изменений, поскольку это влияет только на вас. Просто измените базу данных и файлы миграции в соответствии с вашими потребностями. И на самом деле, рекомендуется изменять здесь файлы миграции, а не загромождать исходную базу ненужными миграциями.
Если вы перешли на удаленное управление, но вы точно знаете, , что никто еще не извлек из этой ветви (если, например, вы являетесь единственным пользователем этой ветви, или если это небольшая команда и вы общались со всеми участниками), снова вы можете делать все, что захотите, с последними изменениями, включая миграции.
Теперь, если кто-то еще потянул, но изменения еще не вступили в силу, вы обычно можете делать все, что хотите, если команда не слишком большая. Просто имейте в виду, что изменение уже зафиксированного файла миграции может привести к тому, что другой разработчик перезапустит надоедливую среду разработки, если они не знают о том, что вы делаете, так что скажите им точно, что им нужно сделать, чтобы получить свою среду разработки. обратно в синхронизации. Так что в этом случае просто общайтесь четко с остальной командой.
Наконец, что, если миграция уже запущена в производство и запущена (или если команда разработчиков слишком велика, чтобы эффективно координировать изменения миграции с другими разработчиками)? В этом случае обычно лучше написать новую миграцию, чтобы отменить ошибочную. В редких случаях хороший программист-ковбой может сойти с рук, редактируя уже запущенные миграции в рабочей среде (и это может быть даже хорошей идеей), но в этом случае вы должны быть очень осторожны, потому что играете с огнем. (и иметь легкий механизм возврата, если вы облажались).
В любом случае, если вы тщательно тестируете, неудачная миграция должна быть очень редкой, чтобы полностью перейти к производству. Для плохой миграции должно быть необычно даже попасть в центральное хранилище (в любой ветке, над которой работает более одного разработчика).
Имея это в виду, скажем, следуя вышеприведенным рекомендациям, вы уже решили, что все в порядке, чтобы изменить ваши миграции. Затем, чтобы ответить на ваши конкретные вопросы:
Могу ли я просто изменить примененную миграцию, чтобы исправить ошибку, а затем
повторно запустить rake db: migrate?
Нет, после запуска миграции его идентификатор сохраняется в базе данных, и он не будет запускаться снова, даже если файл изменится.
Или мне нужно изменить миграцию методами up / down, отменить миграцию и затем выполнить миграцию снова?
Вы должны изменить миграцию методами up / down, да. Но, как вы уже сказали, вы не можете вернуть миграцию официальным способом. Вместо этого вы можете либо заново загрузить свою среду с чистого листа, либо вы можете вручную отменить миграцию, используя sql запросы (не забудьте также удалить связанный идентификатор из таблицы миграции). Затем повторно запустите миграцию.
Или, может быть, я бы отбросил таблицу с новой миграцией и заново создал ее?
Не делайте этого, пока вас не заставят (и даже при этом будьте осторожны, чтобы при запуске его в производстве вы случайно не уничтожили данные во время этого процесса!).
Наконец, следует отметить, что если единственное изменение, которое вы вносите в файл миграции, - это разделение «изменения» на методы «вверх / вниз», а часть «вверх» точно такая же после вашей модификации, Вы даже можете избежать обхода вышеуказанных рекомендаций, потому что это не повредит другим разработчикам (теперь они могут просто откатить то, что раньше не могли откатить). Но в этом случае будьте осторожны - вы не хотите облажаться и случайно даже немного измените метод up.