0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

テストで流しただけのマイグレーションファイルを履歴から削除する

Posted at

環境

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になっています。この履歴を削除するには、まず、Statusupからdownに切り替える必要があります。

一旦削除した、マイグレーションファイルを、ファイル名は適当でいいので、マイグレーションIDを付けた形で復活させます。

$ touch ./db/migrate/20200408005922_tmp1.rb
$ touch ./db/migrate/20200408005924_tmp2.rb

復活させたマイグレーションファイルを、エディタでそれぞれ、このように編集します。

xxxxx_tmp1.rb
class Tmp1 < ActiveRecord::Migration[5.2]
  def change
  end
end
xxxxx_tmp2.rb
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

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?