やりたいこと
マイグレーションファイルを確認したところ、完全に削除されていないマイグレーションファイルファイル(NO FILE)がたくさんあることに気づいた。
NO FILE状態のマイグレーションファイルを完全に削除したい。
解決方法
ターミナルで以下を実行
rails db:migrate:status
マイグレーションファイル一覧が表示される。
今回は一番上のマイグレーションファイルを削除することにする。(マイグレーションIDが20211112062400のファイル)
Status Migration ID Migration Name
--------------------------------------------------
up 20211112062400 ********** NO FILE **********
up 20211112141152 ********** NO FILE **********
up 20211113070815 ********** NO FILE **********
up 20211120123020 ********** NO FILE **********
up 20211201082728 ********** NO FILE **********
up 20211203073311 ********** NO FILE **********
up 20211211052422 Create messages
up 20211215073022 ********** NO FILE **********
up 20211216131616 ********** NO FILE **********
up 20211217053015 ********** NO FILE **********
up 20211223073833 Devise create admin users
up 20211223073838 Create active admin comments
up 20211224044540 Drop table users
up 20211224053115 Devise create users
up 20211224081811 Add column to users
左側のStatusに注目。全てupと表示されていることがわかる。
すでに実行済みのマイグレーションファイルはupと表示されるので、全てのファイルは実行済みの状態である。
upの状態のままだと削除で傷、upからdownに切り替える必要がある。コマンド上で
rails db:migrate:down VERSION=マイグレーションID
を実行すればdownになるのだが、今はファイル名がNO FILEになっているので、新たに削除用のマイグレーションファイルを作成する必要がある。削除したいマイグレーションファイルのマイグレーションIDをコピーし、
touch db/migrate/20211112062400_hoge.rb
を実行。(hogeはダミーネームなので、名前は適当でOK)
作成されたマイグレーションファイルはの中身は空なので、以下を記述。
class Hoge < ActiveRecord::Migration[6.0]
def change
end
end
次に、$ rails db:migrate:statusを実行し、マイグレーションファイル名がNO FILEからHogeに変更されていることを確認。
Status Migration ID Migration Name
--------------------------------------------------
up 20211112062400 Hoge
up 20211112141152 ********** NO FILE **********
up 20211113070815 ********** NO FILE **********
up 20211120123020 ********** NO FILE **********
up 20211201082728 ********** NO FILE **********
up 20211203073311 ********** NO FILE **********
up 20211211052422 Create messages
up 20211215073022 ********** NO FILE **********
up 20211216131616 ********** NO FILE **********
up 20211217053015 ********** NO FILE **********
up 20211223073833 Devise create admin users
up 20211223073838 Create active admin comments
up 20211224044540 Drop table users
up 20211224053115 Devise create users
up 20211224081811 Add column to users
これでマイグレーションIDを指定してupからdownに切り替えることができる。
以下のコマンドを入力すると、
rails db:migrate:down VERSION=20211112062400
これでdown状態にすることができる。
Status Migration ID Migration Name
--------------------------------------------------
down 20211112062400 Hoge
up 20211112141152 ********** NO FILE **********
up 20211113070815 ********** NO FILE **********
up 20211120123020 ********** NO FILE **********
up 20211201082728 ********** NO FILE **********
up 20211203073311 ********** NO FILE **********
up 20211211052422 Create messages
up 20211215073022 ********** NO FILE **********
up 20211216131616 ********** NO FILE **********
up 20211217053015 ********** NO FILE **********
up 20211223073833 Devise create admin users
up 20211223073838 Create active admin comments
up 20211224044540 Drop table users
up 20211224053115 Devise create users
up 20211224081811 Add column to users
最後に以下のコマンドを実行して、マイグレーションファイルを削除する。
rm -rf db/migrate/20211112062400_hoge.rb
$ rails db:migrate:statusを実行すると、
Status Migration ID Migration Name
--------------------------------------------------
up 20211112141152 ********** NO FILE **********
up 20211113070815 ********** NO FILE **********
up 20211120123020 ********** NO FILE **********
up 20211201082728 ********** NO FILE **********
up 20211203073311 ********** NO FILE **********
up 20211211052422 Create messages
up 20211215073022 ********** NO FILE **********
up 20211216131616 ********** NO FILE **********
up 20211217053015 ********** NO FILE **********
up 20211223073833 Devise create admin users
up 20211223073838 Create active admin comments
up 20211224044540 Drop table users
up 20211224053115 Devise create users
up 20211224081811 Add column to users
完全に削除された!
##まとめ
マイグレーションファイルはただ手動で削除してもローカルデータに残ったままで、完全に削除するには今回のような操作を行う必要があるので、DB関連のファイルはより慎重に扱う必要があると感じました。。
まだ多くのNO FILEが残っているので、上記の手順で削除していこうと思います!
Qiita初投稿なので、見づらい部分があるかと思いますが、同じ箇所でつまづいている方に参考になれば幸いです!