はじめに
オリジナルアプリ製作中にマイグレーションファイルの修正が必要になりrollbackの仕方について調べました。
自分なりにまとめたいと思います。
rollbackの手順
まずは現在どこまでmigrateされているかの確認をします。
ターミナル
$ rails db:migrate:status
database: bouldering_development
Status Migration ID Migration Name
--------------------------------------------------
up 20210723073418 Devise create users
up 20210726075554 Create problems
up 20210726100515 Create active storage tablesactive storage
up 20210805065731 Create comments
up 20210806065531 Create likes
こんな感じで出てきます。
一番下に表示されているのが最新のマイグレーションファイルです。
statusのところがup
になっていとmigrateされているということになります。
されていない場合はdown
と表示されます。
ここでは全てup
になっているので全てマイグレーションが実行されているということになります。
最新の一つのファイルだけrollbackする方法
最新のファイル likesだけrollbackしたい時はrails db:rollback
のコマンドを入力
ターミナル
$ rails db:rollback
== 20210806065531 CreateLikes: reverting ======================================
-- drop_table(:likes)
-> 0.0064s
== 20210806065531 CreateLikes: reverted (0.0084s) =============================
こんな感じの表示が出てきたrollback完了です。
rails db:migrate:status
で確認してみましょう。
ターミナル
$ rails db:migrate:status
Status Migration ID Migration Name
--------------------------------------------------
up 20210723073418 Devise create users
up 20210726075554 Create problems
up 20210726100515 Create active storage tablesactive storage
up 20210805065731 Create comments
down 20210806065531 Create likes
likesのstatusがdown
になっているのでrollback成功です。
ちなみにこの状態でもう一度rails db:rollback
のコマンド入力して確認すると
% rails db:migrate:status
database: bouldering_development
Status Migration ID Migration Name
--------------------------------------------------
up 20210723073418 Devise create users
up 20210726075554 Create problems
up 20210726100515 Create active storage tablesactive storage
down 20210805065731 Create comments
down 20210806065531 Create likes
二番目に新しいcommentsがrollbackされます。
指定したところまでrollbackする方法
では、次に指定したところまでrollbackする方法について書いていきます。
その前に一度commentsとlikesをmigrateされた状態に戻します。
ターミナル
$ rails db:migrate
== 20210805065731 CreateComments: migrating ===================================
-- create_table(:comments)
-> 0.0336s
== 20210805065731 CreateComments: migrated (0.0337s) ==========================
== 20210806065531 CreateLikes: migrating ======================================
-- create_table(:likes)
-> 0.0301s
== 20210806065531 CreateLikes: migrated (0.0302s) =============================
$ rails db:migrate:status
database: bouldering_development
Status Migration ID Migration Name
--------------------------------------------------
up 20210723073418 Devise create users
up 20210726075554 Create problems
up 20210726100515 Create active storage tablesactive storage
up 20210805065731 Create comments
up 20210806065531 Create likes
rails db:rollback
では一つずつしかrollbackされなかったがrails db:migrate
ではdown
になっている全てのファイルがmigrateされるので覚えとくべきですね。
commentsとlikesがup
に戻ったので
指定したところまでrollbackする方法に戻ります。
今回、problemsまでのファイルをrollbackさせたいとします。
その場合はrails db:rollback STEP=4
と入力しステータス確認
ターミナル
$ rails db:rollback STEP=4
Status Migration ID Migration Name
--------------------------------------------------
up 20210723073418 Devise create users
down 20210726075554 Create problems
down 20210726100515 Create active storage tablesactive storage
down 20210805065731 Create comments
down 20210806065531 Create likes
すると上のようにproblemsまでのファイルがdown
になりました。
rails db:rollback STEP=⚪️
の⚪️の部分に入れた数字分だけ最新のファイルからrollbackされます。
指定したある一つのファイルのみrollbackする方法
一度rails db:migrate
して全てup
にします。
usersのみrollbackしたいとします。
まずrails db:migrate:status
でマイグレーションファイルの確認します。
Status Migration ID Migration Name
--------------------------------------------------
up 20210723073418 Devise create users
up 20210726075554 Create problems
up 20210726100515 Create active storage tablesactive storage
up 20210805065731 Create comments
up 20210806065531 Create likes
この際、usersのMigration ID
の欄を確認します。ここでいうと20210723073418
ですね。
rails db:migrate:down VERSION=20210723073418
と入力して
ステータス確認すると
ターミナル
$ rails db:migrate:down VERSION=20210723073418
Status Migration ID Migration Name
--------------------------------------------------
down 20210723073418 Devise create users
up 20210726075554 Create problems
up 20210726100515 Create active storage tablesactive storage
up 20210805065731 Create comments
up 20210806065531 Create likes
usersのみdown
となりました。
まとめ
rollbackの方法、何パターンかあるので状況に合わせて使っていきたいと思います。
もし間違いや改善点などありましたらご指摘お願いいたします。