一度マイグレーションを実行したファイルを修正したいときに。指定したファイルのみ戻す事も可能。
目次
始めにステータス確認
% rails db:migrate:status
マイグレーションされている状況の表示。ロールバックしたいファイルがどこにあるのかを確認する為のコマンド。
下記のように、マイグレーションが実行されているものは【up】、マイグレーション前である(DBに反映されていない状態)ものは【down】となっている。
修正したいファイルが【down】の状態である事を確認してから修正すること。
【up】状態のマイグレーションファイルをそのまま修正しても、反映されない。
% rails db:migrate:status
Status Migration ID Migration Name
--------------------------------------------------
up 20220125111403 Create items
down 20220126094444 Create addresses ※例としてdownにしてます
up 20220127105633 Create orders
直近のファイルを戻す方法
% rails db:rollback
直近ひとつ前のファイルを戻すことができる。上の例だと、直近の「Create orders」がdownに。
ロールバックコマンドはひとつづつしか戻せない。
特定のファイルまで戻す方法
% rails db:rollback ※「Create orders」がdown
実行後、続けて
% rails db:rollback ※次の直近の「Create addresses」がdown
という作業を、ロールバックしたい該当ファイルまで繰り返す
もしくは、
% rails db:rollback STEP=n
nに「現在の状態から数えて戻したい回数」を指定する事で、n分のロールバックが実行される。
例)nに2を指定すれば、「Create orders」→「Create addresses」と2回分ロールバックが実行
指定したファイルのみを戻す方法
rails db:migrate:down VERSION=**************
*****の部分には、rails db:migrate:statusで確認した、該当ファイルの Migration ID を指定。
STEPを用いた方法では、該当ファイルに至るまでの全てのファイルがロールバックされてしまうので、該当ファイルのみを戻したい場合のコマンド。
実行後は、down状態になっているか確認してください。
ファイルの修正後
downにしたファイルを編集・修正した後は、再度マイグレートとサーバー再起動をし、up状態・修正内容がDBに反映されているか確認を忘れずに。
チーム開発をしている場合は、ロールバックし、編集して問題ないか、上長なりメンバーなりに確認してください。
メンバー間でマイグレーションファイルに差異があると、マージ・Pullした際にトラブルが起きます。