🔴
【Rails】マイグレーション:** NO FILE **の削除方法を丁寧に解説
はじめに:
Railsアプリケーション開発中でマイグレーションファイルを手動やrails d
コマンドで削除した場合に** NO FILE **と表示され、ファイルが削除できなくなったため、その解決方法をまとめている。
環境:
- windows 11
- Ubuntu 22.04
- wsl 2.1.5.0
- ruby 3.2.3
- rails 6.1.7
- sqlite3 3.37.2
解決方法:
1:マイグレーションの状態を確認する。
ターミナル
$ rails db:migrate:status
ターミナル(出力結果)
Status Migration ID Migration Name
--------------------------------------------------
up 20240405125535 Create posts
up 20240408143436 ********** NO FILE **********
up 20240408152336 Devise create users
touch
コマンドを用いて、ダミーファイルを作成する。
2: Migration IDをコピーし、ターミナル
$ touch db/migrate/20240408143436_hoge.rb
NO FILE
からHoge
に変わっているのを確認する。
3: もう一度マイグレーションの状態を確認し、ターミナル
$ rails db:migrate:status
ターミナル(出力結果)
Status Migration ID Migration Name
--------------------------------------------------
up 20240405125535 Create posts
up 20240408143436 Hoge
up 20240408152336 Devise create users
class
名をファイル名に揃える。(下の内容をコピーして入れ替えるでも可)
4: 削除したいマイグレーションファイルの中身を確認し、db/migrate/20240101_hoge.rb
class Hoge < ActiveRecord::Migration[6.1]
def change
end
end
status
の状態を[up]から[down]にする。
5: 削除したいマイグレーションファイルのターミナル
$ rails db:migrate:down VERSION=20240408143436
ターミナル(出力結果)
Running via Spring preloader in process 363991
== 20240408143436 Hoge: reverting =============================================
== 20240408143436 Hoge: reverted (0.0022s) ====================================
6: statusが[down]になっているか確認する。
ターミナル
$ rails db:migrate:status
ターミナル(出力結果)
Status Migration ID Migration Name
--------------------------------------------------
up 20240405125535 Create posts
down 20240408143436 Hoge
up 20240408152336 Devise create users
20240101_hoge.rb
)を削除する。
7: 作成したダミーファイル(ターミナル
$ rm db/migrate/20240408143436_hoge.rb
8: マイグレーションファイルが削除されているか確認する。
ターミナル
$ rails db:migrate:status
ターミナル(出力結果)
Status Migration ID Migration Name
--------------------------------------------------
up 20240405125535 Create posts
up 20240408152336 Devise create users
消えているのが確認できるかと思います。
Discussion