0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Railsでdb:migrateやdb:rollbackができなくなったときの対処方法

Posted at

はじめに

この記事は2021年9月にまとめていた「細かいつまずいたことをメモしておく(9月編)をそれぞれ投稿した内容になります
解決方法が最新でない可能性もありますのでご了承ください

問題

Migrateをする際にテーブルが外部のテーブルに依存する(外部キーなど)ときに、うまくmigrateやrollbackができないことがあります。一部レコードが外部キーを持っている状態のままレコードに入っていたりするので起きていることがあります

対処方法

まずは参照元、参照先のテーブルを削除していきます

$ rails c
$ Model1.destroy_all
$ Model2.destroy_all

ここではmigrateしたいテーブルにModel1とModel2が紐づいていると仮定しています

またmigrateは途中まで成功しているとロールバックしないので(migrateファイル単位で判断するので失敗したときにはそのファイルの内容のみをロールバックしているので成功したファイルはロールバックされない)、duplicatedというエラーが出た場合はdownを利用して削除していきます(upはすべてコメントアウトさせて辻褄を合わせます)

またMySQLに直でログインしてDBをデバックして原因となっている箇所を特定するのもよくやります

$ mysql -u root -p
$ use Database名
$ desc テーブル名 # テーブル構造を表示
$ show index from テーブル名 # インデックスが張られているか表示
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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?