読者です 読者をやめる 読者になる 読者になる

Blank?=False

「呉下の阿蒙にあらず」をモットーにしたITエンジニアの日々

Rails マイグレーションスクリプトを書き直した時は

f:id:stonebeach-dakar:20160618082625p:plain

よくマイグレーションスクリプトを書き間違えて、アレ?間違えた!ってことがけっこうあります。
そんなときは、以下の2つの対応方法があると思います。

  1. 新しいマイグレーションスクリプトを作成して、テーブルを修正する。
  2. 間違えたマイグレーションスクリプトを修正して再migrate

この時の対処方法をど忘れすることがあるので、メモとして残します。

自分の場合、コミット前、リリース前なら2.で対応することが多いです。
理由は単にマイグレーションスクリプトを増やしたくないこと、仕様を変更ならログとして残すのは良いと思いますが、単に間違えただけなら修正したほうが後から見た時に間違えたんだな、とわかりやすいんじゃないかなと。

マイグレーションスクリプトを修正した後は、

$bin/rake db:reset

ではなく、

$bin/rake db:migrate:reset

を使う必要があります。
何故かと言うと、bin/rake db:resetschema.rbを元にデータベースを作り直すからです。
用途としては、db:seedで作成したデータ以外のデータを削除したい時に使うものです。
よって、マイグレーションスクリプトを修正しても反映されません。(見てないもんね)

bin/rake db:migrate:resetの場合、マイグレーションスクリプトを読み込んで再マイグレーションする、という動作になります。
この際、shcema.rbも書き換えられます。
コレでマイグレーションスクリプトの修正も反映されるようになります。

まとめ

  • bin/rake db:reset データベースのデータをリセット
  • bin/rake db:migrate:reset データベースを再マイグレーション

参考サイト

easyramble.com