Rails migration | 通らないmigration をスキップする | down upの変更方法

2018年1月30日

 

rails ではマイグレーションコードを
gitで保管して、DBの変更履歴を残していたり
するのですが、
たまーーに
migrationコードを実行せずにSQLで直接
DBを変更する輩がいます。

 

そんな時に

rails db:migrate

としようものなら、
「そんなカラムはalreadyで存在するぜ」
とか
「そんなカラムないけどちゃんと確認して」
と怒られることがあります。

 

いらないマイグレーションコードだとわかっていれば
すぐにファイルを削除してしまえばいいのですが、
そうもできない時があります。

 

そんな時に、実際は実行してないけど
スキップする方法を探していたのですが。。。

ありました

方法は簡単です。

 

 

 

スキップしたいバージョン番号のレコード
をschema_migrationテーブルに追加する

です。
これで、migrateがupの状態になり、
次から実行されることはありません。

railsのマイグレーションはどうやら、
schema_migrationというテーブルで
migrationの実行有無( rake db:migrate:statusで見れるやつ )
を管理しているようですね。

バージョン番号というのは
rails gすると勝手に先頭に付加される数字です

 例 ) 20170310XXXXXX_create_user.rb

また逆も然りで、
再度migrationコードを実行したい場合は
対象のレコードを削除してあげます。

試してみてください!!