Skip to content

practicesテーブルの適用済みのマイグレーションファイルが誤って削除されてschema.rbと不整合が起きている #9284

@ryufuta

Description

@ryufuta

概要

  • 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のリリースブランチでリリース

しているため、本番環境ではマイグレーションが適用済みで、動作にも問題ないと推測される。

不整合が起きていることの確認手順

  1. 開発環境でbin/rails db:migrate:resetを実行してマイグレーションを最初からやり直す
  2. 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で以下を確認する。

  1. 2つのマイグレーションファイルの内容(インデックスと外部キーの設定)が適用されている
  2. 2つのマイグレーションファイルのバージョン番号がschema_migrationsテーブルに記録されている

(おそらく両方OKだと思うが)1がOK、2がNGの場合はrails db:migrateに失敗する(未適用のマイグレーションファイルなので適用しようとするが既にインデックスと外部キーが設定済みのため)。
その場合、ファイルの復元手順を工夫することになる。

関連

該当するマイグレーションファイルを追加したPR: #8797
該当するマイグレーションファイルを削除したPR: #8535

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

Status

完成

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions