Есть ли простой способ проверить миграцию перед ее запуском? - PullRequest
0 голосов
/ 17 августа 2011

Другими словами, я хотел бы знать, как лучше всего убедиться, что self.down на самом деле откатывается self.up до работает с миграцией , о которой идет речь.

Что я могу сделать, если мне нужно откатить миграцию, но self.down не подходит для этой цели?

Что является наилучшей практикой при работе с потенциально разрушительными миграциями? Просто резервная копия базы данных?

Спасибо, Дуччо.

Ответы [ 4 ]

3 голосов
/ 17 августа 2011

Вы должны разрабатывать базу данных разработки, которая не должна содержать живых данных.Поэтому не должно иметь значения, уничтожены ли данные, поскольку вы можете легко сгенерировать их снова?

Резервное копирование базы данных может быть уместным, если вы оказались в ситуации, когда ваши данные разработки важны, но не идеальны.

1 голос
/ 17 августа 2011

Обычно миграции должны содержать только изменения схемы. В этом случае должно быть очень безопасно и легко запускать миграции в среде dev / test. Если что-то пойдет не так, вы можете заново создать базу данных и заполнить ее некоторыми тестовыми данными. Но если у вас есть некоторые связанные с данными миграции, которые могут быть проверены, вещи могут пойти не так, когда вы действительно запустите их на производстве.

В этом случае, как вы упомянули, резервное копирование базы данных - это то, на что вы должны полагаться. Приходите с правильным и быстрым механизмом восстановления перед развертыванием.

0 голосов
/ 18 августа 2011

Каждая миграция выполняется внутри транзакции. Запомни. Это означает, что если что-то пойдет не так в рамках одной миграции, миграция будет отменена (и если есть какие-либо последующие, они не будут выполнены).

Для проверки миграций, будь то up или down Я вставляю множество операторов put, чтобы проверить, все ли сработало, и затем в моей последней строке я поднимаю исключение. Это заставит рельсы думать, что миграция не удалась, и откатит операцию (как если бы это никогда не происходило).

Когда я уверен, что все работает как надо, я удаляю линию повышения и позволяю миграции действительно работать. В вашем случае вы бы протестировали с рейзом, удалили рейз и НЕ запустили бы его снова, я полагаю :)

Надеюсь, это поможет.

0 голосов
/ 17 августа 2011

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

Запустите команду

rake -T

, чтобы показать вам доступные задачи, такие как

rake db:migrate

или

rake db:rollback
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...