2016-06-14 3 views
1

Я просто изучаю Rails и начал раздел по миграции баз данных. Я построил 2 миграции и успешно выполнил миграцию. Миграция вниз, последняя миграция, первая из которых выполняется, не удалась из-за опечатки в моем коде. Я исправил опечатку, но после этого миграция продолжала терпеть неудачу. Я обнаружил причину, по которой миграция вниз прервалась на полпути с помощью изменений, а затем, когда я попытался мигрировать снова, она потерпела неудачу, потому что некоторые изменения были уже сделаны, и поэтому имена столбцов были разными, и другие подобные проблемы. Я закончил тем, что исправил его, столкнувшись с таблицей schema_migrations и вручную отменив свои изменения до предыдущей версии, а затем переместился обратно вверх и вниз оттуда.переходы базы данных рельсов с использованием транзакций

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

ответ

2

Rails уже запускать миграции внутри транзакции if your database supports it:

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

Решает использовать базу данных, которая учитывает транзакции при выполнении изменений схемы. MySQL (насколько я знаю) не делает, но Postgres абсолютно делает.

+0

Полезно знать. Спасибо. – richbai90

+0

Я использую mariadb, и он поддерживает транзакции. Есть ли причина, что он не работает в этом случае? Я использую разъем mysql2. – richbai90

Смежные вопросы