🖥
Rails - 間違ったマイグレーションを環境に反映してしまった時のリカバリ方法
前提
稼働している環境に対して、間違ったマイグレーションを反映してしまった場合
( 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オープンチャットもご利用ください。
プロフィール・経歴
公開日時
2024-09-06
Discussion