ruby 2.6.6
rails 6.0.3
catalina 10.15.5
railsのmigration fileが外部キーでdown出来ない時の対処法がググってもあまり情報が出て来なかったので、後学のために。
要らないmigration fileを削除したく以下コマンド叩く。
$ rails db:migrate:down VERTION=migration_file_id
すると下記エラー
Mysql2::Error: Cannot drop table 'stores' referenced by a foreign key constraint
エラーメッセージに外部キーと書いてあるので、まずは無効化。の前にdatabase選択
以下コマンド後、少し解説
mysql> show databases;
mysql> use database名;
# 外部キー無効化
mysql> set foreign_key_checks = 0;
mysql> show tables;
mysql> select * from schema_migrations;
mysql> select * from schema_migrations where version = 'migration_file_id';
mysql> delete from schema_migrations where version = 'migration_file_id';
mysql> select * from schema_migrations;
$ rails db:migrate:status
$ rails db:rollback
ここまでコマンドのみ
以下解説
mysql> select * from schema_migrations;
+----------------+
| version |
+----------------+
| 20200714085643 |
| 20200715061816 |
+----------------+
2 rows in set (0.00 sec)
消したいのはこれ → 20200714085643
mysql> select * from schema_migrations where version = '20200714085643';
+----------------+
| version |
+----------------+
| 20200714085643 |
+----------------+
1 row in set (0.00 sec)
mysql> delete from schema_migrations where version = '20200714085643';
Query OK, 1 row affected (0.00 sec)
mysql> select * from schema_migrations;
+----------------+
| version |
+----------------+
| 20200715061816 |
+----------------+
1 row in set (0.01 sec)
# 20200714085643が消えた
# 外部キー有効化
mysql> set foreign_key_checks = 1;
# 最新のマイグレーションファイルのバージョンが指定データベースのschema_migrationsテーブルから削除される
$ rails db:rollback
downしたいファイルが複数ある場合は下記コマンド
# 5つのマイグレーションファイルをロールバックしたい時
$ rails db:rollback STEP=5
これでrails db:migrate:statusすればdownになっているはず。