0
1

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.

railsのマイグレーションをミスったときにやり直す

Posted at

bundle exec rails db:migrate をした際に思ってた通りにマイグレーションできずに、失敗することがあります。

この時、git操作でchanged を消すと、migrationした履歴だけが残ってしまい、
マイグレーションステータスにNO FILEが存在していてやっかいなことになります。

汚れてしまったマイグレーション履歴をきれいに戻す手順を示していきます。

とりあえずstatusコマンドで状況を確認

$ bundle exec rake db:migrate:status

database: ***/development.sqlite3

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20200707153004  Create users
   up     20200711014336  Create groups
   up     20200715054409  Create graphs
   up     20200715072011  Add group id to graph
   up     20200729104800  Add default temp3 to graph
   up     20200729105435  Add default temp2 to graph
   up     20200729124216  Add values to graphs
   up     20200729124408  ********** NO FILE **********

この ********** NO FILE ********** 状態が存在すると、以降、bundle exec rails db:migrate が成功しなくなります。

## とりあえずNO FILE状態から脱出

上記のstatusコマンドで確認したMigration IDをもとにし、以下のファイルを作成。

$ vi db/migrate/#{Migration ID}_tmp.rb

class Tmp < ActiveRecord::Migration[5.1]
  def change
  end
end

再度statusコマンドで再確認し、NO FILEが消えていることを確認

$ bundle exec rake db:migrate:status

Status   Migration ID    Migration Name
--------------------------------------------------
   up     20200707153004  Create users
   up     20200711014336  Create groups
   up     20200715054409  Create graphs
   up     20200715072011  Add group id to graph
   up     20200729104800  Add default temp3 to graph
   up     20200729105435  Add default temp2 to graph
   up     20200729124216  Add values to graphs
   up     20200729124408  Tmp

NO FILEからTmpになってる

Tmpのマイグレーション履歴をdown statusに変更する

$ bundle exec rake db:migrate:down VERSION=#{Migration ID}

ステータスがdownになっていることを確認する

$ bundle exec rake db:migrate:status

database: ***/development.sqlite3


 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20200707153004  Create users
   up     20200711014336  Create groups
   up     20200715054409  Create graphs
   up     20200715072011  Add group id to graph
   up     20200729104800  Add default temp3 to graph
   up     20200729105435  Add default temp2 to graph
   up     20200729124216  Add values to graphs
  down    20200729124408  Tmp

マイグレーションファイルを削除する

$ rm -rf db/migrate/#{Migration ID}_tmp.rb

最後にステータスを確認

$ bundle exec rake db:migrate:status


database: ***/development.sqlite3

 Status   Migration ID    Migration Name
--------------------------------------------------
 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20200707153004  Create users
   up     20200711014336  Create groups
   up     20200711085035  Create device data
   up     20200715054409  Create graphs
   up     20200715072011  Add group id to graph
   up     20200729104800  Add default temp3 to graph
   up     20200729105435  Add default temp2 to graph
   up     20200729124216  Add values to graphs

履歴自体が消えて、失敗前に戻った🎉

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?