LoginSignup
1
0

More than 1 year has passed since last update.

指定したマイグレーションファイルをrollbackする方法

Posted at

はじめに

オリジナルアプリ製作中にマイグレーションファイルの修正が必要になり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の方法、何パターンかあるので状況に合わせて使っていきたいと思います。

もし間違いや改善点などありましたらご指摘お願いいたします。

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0