環境
Vagrant + Ubuntu 16.04.5 LTS
Rails 5.2.4.2
はじめに
テストの目的で作成したマイグレーションファイルが不要になったので、ファイル自体を、rmで削除したのだが、マイグレーションの履歴には下記のように残ってしまう事になります。気持ちが悪いので履歴からも削除してみましょう。
$ rails db:migrate:status
database: syougai_development
Status Migration ID Migration Name
--------------------------------------------------
up 20200407073641 Create tasks
up 20200408005922 ********** NO FILE **********
up 20200408005924 ********** NO FILE **********
up 20200408005926 Change tasks karamu not null
手順
上記の通り、rails db:migrate:statusで表示すると、マイグレーションファイルを手動で削除したため、NO FILEになっています。この履歴を削除するには、まず、Statusをupからdownに切り替える必要があります。
一旦削除した、マイグレーションファイルを、ファイル名は適当でいいので、マイグレーションIDを付けた形で復活させます。
$ touch ./db/migrate/20200408005922_tmp1.rb
$ touch ./db/migrate/20200408005924_tmp2.rb
復活させたマイグレーションファイルを、エディタでそれぞれ、このように編集します。
class Tmp1 < ActiveRecord::Migration[5.2]
def change
end
end
class Tmp2 < ActiveRecord::Migration[5.2]
def change
end
end
マイグレーションの履歴を参照すると、ファイルが復活している事が確認できます。
$ rails db:migrate:status
database: syougai_development
Status Migration ID Migration Name
--------------------------------------------------
up 20200407073641 Create tasks
up 20200408005922 Tmp1
up 20200408005924 Tmp2
up 20200408005926 Change tasks karamu not null
復活したマイグレーションの履歴のステータスをdownさせます。
$ rails db:migrate:down VERSION=20200408005922
== 20200408005922 Tmp1: reverting =============================================
== 20200408005922 Tmp1: reverted (0.0043s) ====================================
$ rails db:migrate:down VERSION=20200408005924
== 20200408005924 Tmp2: reverting =============================================
== 20200408005924 Tmp2: reverted (0.0050s) ====================================
補足だが、マイグレーションファイル名をTmp1、Tmp2と分けた理由は、同一名にすると、ステータスをdownさせる時に、下記のエラーが出たためです。(同一名はあかんようです)
$ rails db:migrate:down VERSION=20200408005922
rails aborted!
ActiveRecord::DuplicateMigrationNameError:
Multiple migrations have the name Tmp.
ステータスがdownされた事を確認します。
$ rails db:migrate:status
database: syougai_development
Status Migration ID Migration Name
--------------------------------------------------
up 20200407073641 Create tasks
down 20200408005922 Tmp1
down 20200408005924 Tmp2
up 20200408005926 Change tasks karamu not null
ここで、不要なマイグレーションファイルを削除します。
$ rm ./db/migrate/20200408005922_tmp1.rb
$ rm ./db/migrate/20200408005924_tmp2.rb
履歴を参照すると、削除された事が確認できます。
$ rails db:migrate:status
database: syougai_development
Status Migration ID Migration Name
--------------------------------------------------
up 20200407073641 Create tasks
up 20200408005926 Change tasks karamu not null
参考URL