概要
db/migrate/20250618142946_add_index_on_source_id_to_practices.rb
db/migrate/20250618144325_add_foreign_key_to_practices_source_id.rb
が 140ab86 のコミットで誤って削除されている。
(同PRの他のコミットを見ると、schema.rbにコンフリクトが発生して修正しているうちに誤って削除したと推測される。)
schema.rb上では上記2つのマイグレーションの内容は適用された状態になっているが、別のマイグレーションファイルで削除した内容を補完した訳ではないことが、以降の確認手順からわかる。
つまり、schema.rbとマイグレーションファイルが不整合の状態になっている。
ただし、
- マイグレーションファイルを追加したPRは2025-06-19のリリースブランチでリリース
- マイグレーションファイルを削除したPRは2025-07-03のリリースブランチでリリース
しているため、本番環境ではマイグレーションが適用済みで、動作にも問題ないと推測される。
不整合が起きていることの確認手順
- 開発環境で
bin/rails db:migrate:resetを実行してマイグレーションを最初からやり直す
db/schema.rbに変更が生じ、diffを確認すると以下のように該当するマイグレーションの内容が取り消されていることを確認する
@@ -637,7 +636,6 @@ ActiveRecord::Schema.define(version: 2025_09_05_025850) do
t.text "summary"
t.integer "source_id"
t.index ["category_id"], name: "index_practices_on_category_id"
- t.index ["source_id"], name: "index_practices_on_source_id"
end
(中略)
@@ -1049,7 +1046,6 @@ ActiveRecord::Schema.define(version: 2025_09_05_025850) do
add_foreign_key "pages", "users"
add_foreign_key "participations", "events"
add_foreign_key "participations", "users"
- add_foreign_key "practices", "practices", column: "source_id"
add_foreign_key "practices_books", "books"
add_foreign_key "practices_books", "practices"
add_foreign_key "practices_movies", "movies"
やること
- 削除した2つのマイグレーションファイルを復元する
- その際schema.rbには変更を加えない(マイグレーションの内容は反映済みのため)
- 本番環境に正常にデプロイできるように気をつける
注意
ファイル復元後に本番環境に正常にデプロイするために事前に本番環境のDBで以下を確認する。
- 2つのマイグレーションファイルの内容(インデックスと外部キーの設定)が適用されている
- 2つのマイグレーションファイルのバージョン番号が
schema_migrationsテーブルに記録されている
(おそらく両方OKだと思うが)1がOK、2がNGの場合はrails db:migrateに失敗する(未適用のマイグレーションファイルなので適用しようとするが既にインデックスと外部キーが設定済みのため)。
その場合、ファイルの復元手順を工夫することになる。
関連
該当するマイグレーションファイルを追加したPR: #8797
該当するマイグレーションファイルを削除したPR: #8535
概要
db/migrate/20250618142946_add_index_on_source_id_to_practices.rbdb/migrate/20250618144325_add_foreign_key_to_practices_source_id.rbが 140ab86 のコミットで誤って削除されている。
(同PRの他のコミットを見ると、
schema.rbにコンフリクトが発生して修正しているうちに誤って削除したと推測される。)schema.rb上では上記2つのマイグレーションの内容は適用された状態になっているが、別のマイグレーションファイルで削除した内容を補完した訳ではないことが、以降の確認手順からわかる。つまり、
schema.rbとマイグレーションファイルが不整合の状態になっている。ただし、
しているため、本番環境ではマイグレーションが適用済みで、動作にも問題ないと推測される。
不整合が起きていることの確認手順
bin/rails db:migrate:resetを実行してマイグレーションを最初からやり直すdb/schema.rbに変更が生じ、diffを確認すると以下のように該当するマイグレーションの内容が取り消されていることを確認するやること
注意
ファイル復元後に本番環境に正常にデプロイするために事前に本番環境のDBで以下を確認する。
schema_migrationsテーブルに記録されている(おそらく両方OKだと思うが)1がOK、2がNGの場合は
rails db:migrateに失敗する(未適用のマイグレーションファイルなので適用しようとするが既にインデックスと外部キーが設定済みのため)。その場合、ファイルの復元手順を工夫することになる。
関連
該当するマイグレーションファイルを追加したPR: #8797
該当するマイグレーションファイルを削除したPR: #8535