2016-06-14 6 views
1

私はRailsを学んでいるだけで、データベースの移行に関するセクションを開始しました。私は2つの移行を構築し、両方とも正常に移行しました。マイグレーション中に、最初に実行された最新の移行は、コードの入力ミスのために失敗しました。私はタイプミスを修正しましたが、それ以降は移行が失敗し続けました。移行の途中で変更が途中で中止され、その後移行が失敗した理由は、変更の一部が既に行われていて列名が異なるため、その他の問題が原因で失敗したという理由がわかりました。私はschema_migrationsテーブルを使って手作業で修正し、手動で変更を以前のバージョンにロールバックしてから、そこから元に戻ったり、元に戻したりして移行しました。トランザクションを使用したデータベースのマイグレーション

私の質問は、トランザクションモードでの移行を実行するようにRailsに指示する方法です。コードが失敗した場合は、トランザクションをコミットしないでください。

答えて

2

Railsはすでにトランザクションif your database supports it内のあなたの移行を実行します:

スキーマを変更文との取引をサポートするデータベースでは、移行は、トランザクションに包まれています。データベースがこれをサポートしていない場合、移行が失敗した場合、その成功した部分はロールバックされません。手作業で行った変更をロールバックする必要があります。

スキーマ変更を実行するときにトランザクションを尊重するデータベースを使用するのはあなた次第です。 MySQLは(私が知る限りは)、Postgresは絶対にしません。

+0

お役立ち情報ありがとうございました。 – richbai90

+0

私はmariadbを使用しており、トランザクションをサポートしています。この場合にはうまくいかない理由はありますか?私はmysql2コネクタを使用しています。 – richbai90

関連する問題