🙆‍♀️

Migration Errorが出たとき

2023/07/30に公開

🍍現状

チーム開発を行っているときにデータを更新するためにgit pullを行ったのちにrails sを行ったら以下のようなエラーが出現した。

🍍Error

maigrationされてないファイルがあるからmaigrationしてねと言われているのでmigrationを行ったらok

🍍migrationできなかった

migrationを行ったら解決すると思ったが、そもそものmigrationができなかった。migrationを行った結果上画像のようなエラーが表示された。

新たにmigrationしようとしているcustomersという名前は既に使われているから名前が重複するのでダメだよと言われた。

🍍解決

rails:db:migrate:status

今のmigrationファイルがどのような状態になっているか rails:db:migrate:statusで確認する。

同じファイル名にしているのは見られないが、NO FILEが2つ見られるのが気になる。
🙉いらないmigrationファイルを消去するときはdownにして消さないとファイルが消えてもデータは残ってしまうみたい。
→そのため、NO FILEのどちらかがもともとcustomersの名前を使用していたファイルであったので残ったデータが邪魔してmigrationができなくなっている。

残っているデータを消す。

残っているデータを消去するには、ファイルをもう一度作成しdownにしたうえでファイルを消去することでデータごと消すことができた。

ファイルの作成

  • db/migrateで新たなファイルを作成し名前を復元させたいファイルのmigration ID+臨時で復元させているだけなので自分で分かるようなファイル名+他のファイルと同様の記述とする。
  • 自分で作成したファイルなので中を開いてもなにも記述されていない。そのため、ほかのファイルと同様に作成されたときに記述される一行目と最後の行だけは記述する。

上記の二つがうまくいっていれば、rails:db:migrate:statusしたときに先ほどNO FILEだったところが名前が変更されているのが確認できる。

rails db:rollback STEP=○

rails db:rollback STEP=2と記述すると今+2なので3個目のファイルまでdownしてくれる。
消去したいファイルのところまでこのコマンドでdownさせたら消去させたいファイルを消すだけでOK。

これでもう一度rails:db:migrateを行うとエラーなくmigrateすることができた🎉🎉

まとめ

間違えたからと言ってむやみにファイルを消去しないようにする!
データは残ってるからチームの人に迷惑かかる!!!👹👺

Discussion