Rails4-migrate:rollbackやredoでマイグレーションバージョンが戻せない

Published on:
Last updated:

This post is also available in: 日本語 (Japanese)

Rails4で特定のバージョンのマイグレーションファイルに戻したいが、db:migrate:redo や db:rollback で戻せないという状態の時のメモです。

1.まずはマイグレーションファイルのステータスの確認

bundle exec rake db:migrate:status

今回の場合、マグレーションファイルを削除していて db:migrate:redo や db:rollback ができなかったようだと分かりました。以下の例だと、 20161010194225 です。
(そもそも、マグレーションファイルを削除するのではなく、rails generate migration Remove... でテーブルやコラムを削除するべきなんですが...)

 Status   Migration ID    Migration Name
--------------------------------------------------
   ...
   up     20161022004812  Add something
   up     20161005164753  Remove something
   up     20161010194225  ********** NO FILE **********

2.データベースのschema_migrationsを編集する

Railsで使っているデータベースに、schema_migrations というテーブルがあります。この schema_migrations テーブルから該当のNO FILEの行(上記の例で言うと 20161010194225 )を削除します。

3.db:migrate:redo もしくは db:rollback を実行する

その後、再度 db:migrate:redo もしくは db:rollback を実行します。

bundle exec rake db:migrate:redo
bundle exec rake db:rollback

About
Kuniyoshi Takemoto is the founder of Amelt.net LLC, and editor of this blog(www.amelt.net).Learn more and follow me on LinkedIn.