🖥

Rails - 間違ったマイグレーションを環境に反映してしまった時のリカバリ方法

2024/11/14に公開

前提

稼働している環境に対して、間違ったマイグレーションを反映してしまった場合
( PRのマージ先を間違った場合など )

今回は誤ったテーブルを新規作成してしまったケースで考える

STEP 1 - コードの修正

まずは誤ったコードをRevertするなどして、正しい状態に戻してデプロイする

最低限 schema.rb に記録されている「最新のマイグレーション時刻」は元に戻す必要がある

- ActiveRecord::Schema[7.2].define(version: 2024_09_06_123701) do
+ ActiveRecord::Schema[7.2].define(version: 2024_09_05_100123) do

STEP 2 - DBのリカバリ

DBを正しい状態に戻す

この例ではSQLを直接実行して、誤って作られてしまったテーブルを削除する

DROP TABLE IF EXISTS example_table

Rails経由で実行する場合は rails console / rails runner を使うと手軽に実行しやすい

rails runner "ActiveRecord::Base.connection.execute('DROP TABLE IF EXISTS example_table')"

STEP 3 - DBのリカバリ ( schema_migrations )

誤って記録された分の schema_migrations のレコードを削除する

Rails は schema_migrations というテーブルでマイグレーション履歴を管理しているので、レコードの状態を正しくする

例:

DELETE FROM schema_migrations WHERE version = "20240906123701"

Rails経由でやる場合は以下

rails runner "ActiveRecord::Base.connection.execute('DELETE FROM schema_migrations WHERE version = \"20240906123701\"')"

チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

プロフィール・経歴

https://github.com/YumaInaura/YumaInaura

公開日時

2024-09-06

https://qiita.com/YumaInaura/items/8bbf43d1e628403058ba

Discussion