Herokuにpushしたらdb:migrateしよう(HerokuのRelease Phaseについても)

自作サービスで学んだことメモ

git push heroku mainをしたら、本番環境のデータが全部消えてまっさらなページになってしまっている。

heroku pg:psqlでDBの内容を確認。

SELECT * FROM users;してみるとデータあり。よしデータは消えていない!けどなんで?

今回pushした内容はというと、acts-as-taggable-onで記事にタグをつけられるようにした(= tagsテーブルとtaggingsテーブルを作った)

rails db:migrate:statusでDBを確認すると、Statusがdownだらけ。

heroku run rails db:migrateとすると、本番環境でデータが反映された!

(ちなみに自分の環境ではheroku runコマンドが実行できずに、Thor::Invocationエラーがでたのでheroku run bash -a <appname>bashを使用する方法、もしくはheroku run bin/rails db:migrateとする方法で解決した。このエラーは未解決で、修正できたら別記事にしたい。)

よくよく見たらRailsチュートリアルでも、Userモデルを追加した際にマイグレーションしていたようだ。

Heroku上でもマイグレーションを走らせる必要があった。またひとつ学んだ。


そして、マイグレーション忘れやコマンド入力の手間を省くため、Release Phasedb:migrateするように設定。

Release Phase(リリースフェーズ)とはアプリのビルド終了後、リリースする直前に任意のコマンドが実行できるというもの

Procfileに

release: bin/rails db:migrate

とするだけでHeroku側でマイグレーションしてくれる。

ちなみにRelease Phase中になんらかの処理が失敗した場合にはデプロイが中止されるため、リリースに必須な処理を挟み込む際にも安心して利用できるとのことでした。

参考記事