LoginSignup
2
0

More than 3 years have passed since last update.

マイグレーションのロールバックが出来ない時の対処方法(UnknownMigrationVersionError)

Last updated at Posted at 2021-01-12

はじめに

rails db:rollbackでマイグレーションファイルをロールバックしようとしたところ、下記のようにUnknownMigrationVersionErrorというエラーに悩まされたので、この解決方法について書こうと思います。

ターミナル
rails aborted!
ActiveRecord::UnknownMigrationVersionError: 

No migration with version number 20201230115014.

UnknownMigrationVersionErrorの詳細

rails db:migrateでマイグレーションファイルの状態を確認したところ、NO FILEと書かれた身に覚えのないデータが残っていました。
これは、ステータスがupのままVSコード上でマイグレーションファイルを削除してしまったため、DB上にはデータが残っている状態でした。(おそらく、ActiveHashでモデルを作成した時に、skip-migrationを忘れて謝って作成したファイルだと思います...)
まとめると、対応するファイルが存在しないマイグレーションデータが残ったままになっていたのが、UnknownMigrationVersionErrorの原因でした。

D5E70B3A-1D63-479C-94FD-900F409069C4_4_5005_c.jpeg

解決方法

1. VSコード上にマイグレーションファイルを作成

まず、NO FILEとなっていたIDが20201230115014のデータに対応するファイルを、VSコード上で作成します。(今回は、「20201230115014.dummy.rb」というファイル名で作成しています。)

99E65E07-FF88-42CC-9BC3-3C9C084D0334_4_5005_c.jpeg

2. ステータスをdownにする

マイグレーションファイルを作成しただけの状態で、ロールバックしようとすると下記のようにエラーが出ます。これは、先ほど作成したマイグレーションファイルの中身が何も記述されていないことが原因です。

ターミナル
rails aborted!
NameError: uninitialized constant Dummy

これを解消するために、マイグレーションファイル内にクラスとchangeアクションを記述します。その後、一度マイグレートを行います。

20201230115014.dummy.rb
class Dummy < ActiveRecord::Migration[6.0]
  def change
  end
end
ターミナル
rails db:migrate

この状態で、ロールバックしてあげると、無事ステータスがダウンになりました。
A5D9F5BE-30C3-4305-87D0-8AE73B397D3D_4_5005_c.jpeg

3. 対象ファイルの削除

ここまで来れば、後は対象ファイルを削除するだけです。VSコードで「20201230115014.dummy.rb」のファイルを削除した後、rails db:migrate:statusで確認すると、無事対象のデータが削除できてることが確認できます。
5C22EAFC-90C1-4B95-8F5A-AB7B82F34315_4_5005_c.jpeg

終わりに

何気なく、ステータスを確認せずにマイグレーションファイルを削除すると後々面倒だなと思いました。何か見てくださる方のヒントになれば幸いです。

参考

2
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
2
0