0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Rails】マイグレーションをgit revertした際の事後対応

Posted at

はじめに

マイグレーションを実行したコミットをgit revertした際に事後対応が必要となったため、その対応について記録します。

git revert 後の状態

  • マイグレーションファイルが削除済みになる(Vscode上)
  • マイグレーションのStatusが「up」でMigration Nameが「****** NO FILE ******」になる
$ rails db:migrate:status

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20240412075830  Remove hoge from fuga
   up     20250401071535  ********** NO FILE **********

対応

手順

1. ダミーファイルを作成し、「***** NO FILE *****」と置き換える

2. ダミーファイルのマイグレーションStatusを「down」に変更する

3. ダミーファイルを削除する

手順の解説

1. ダミーファイルを作成し、「***** NO FILE *****」と置き換える

  • ダミーファイルを作成
    • ファイル名は「**** NO FILE ****」のMigration IDをコピペし、[Migration ID]_[任意の名前].rbとする
    • ファイルの中身は空のメソッドなどを書く
$ touch db/migrate/20250401071535_piyo.rb
# 20250401071535_piyo.rb
class Piyo < ActiveRecord::Migration[6.0]
  def change
  end
end
  • 「***** NO FILE *****」とダミーファイルが置き換わっていることを確認
$ rails db:migrate:status

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20240412075830  Remove hoge from fuga
   up     20250401071535  Piyo

2. ダミーファイルのマイグレーションStatusを「down」に変更する

  • マイグレーションStatusを「down」に変更する
$ rails db:migrate:down VERSION=20250401071535
  • 「down」に変更されていることを確認する
$ rails db:migrate:status

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20240412075830  Remove hoge from fuga
  down    20250401071535  Piyo

3. ダミーファイルを削除する

  • 削除する
$ rm db/migrate/20250401071535_piyo.rb
  • ステータスからも削除されていることを確認する
$ rails db:migrate:status

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20240412075830  Remove hoge from fuga

その他

マイグレーションは実行したい場合

  • git revert したコミットの中にマイグレーションを含む複数の変更があり、マイグレーションは実行したいが、その他の変更はrevertした状態のままにしたい場合を想定
  • 上記の対応手順のダミーファイルを元のマイグレーションファイル名と中身で作成する
  • 手順3のダミーファイルの削除の代わりに rails db: migrate を実行する

git revertを取り消したい場合(適切な手順ではないと思いますが、下記を実行した際の記録です)

  • リモートリポジトリのHEADに合わせて巻き戻す
$ git reset --hard origin/[リモートリポジトリ名]
  • マイグレーションstatusを確認する
$ rails db:migrate:status

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20240412075830  Remove hoge from fuga
  down    20250401071535  Add foreign key constraint to active storage attachments for blob idactive storage
  • マイグレーションを実行する
$ rails db:migrate
  • マイグレーションstatusが「up」になったことを確認する
$ rails db:migrate:status
 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20240412075830  Remove detail date from bill details
   up     20250401071535  Add foreign key constraint to active storage attachments for blob idactive storage

おわりに

マイグレーションを含むコミットをリバートすると事後対応が必要になることが分かりました。後先を考えずにリバートを使わないよう気を付けたいと思います。

0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?