0
0

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

Posted at

前提

稼働している環境に対して、間違ったマイグレーションを反映してしまった場合
( 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オープンチャットもご利用ください。

プロフィール・経歴

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