🔴

【Rails】マイグレーション:** NO FILE **の削除方法を丁寧に解説

2024/04/11に公開

はじめに:

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

2: Migration IDをコピーし、touchコマンドを用いて、ダミーファイルを作成する。

ターミナル
$ touch db/migrate/20240408143436_hoge.rb

3: もう一度マイグレーションの状態を確認し、NO FILEからHogeに変わっているのを確認する。

ターミナル
$ rails db:migrate:status
ターミナル(出力結果)
 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20240405125535  Create posts
   up     20240408143436  Hoge
   up     20240408152336  Devise create users

4: 削除したいマイグレーションファイルの中身を確認し、class名をファイル名に揃える。(下の内容をコピーして入れ替えるでも可)

db/migrate/20240101_hoge.rb
class Hoge < ActiveRecord::Migration[6.1]
  def change
  end
end

5: 削除したいマイグレーションファイルのstatusの状態を[up]から[down]にする。

ターミナル
$ 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

7: 作成したダミーファイル(20240101_hoge.rb)を削除する。

ターミナル
$ 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