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 Phaseでdb:migrate
するように設定。
Release Phase(リリースフェーズ)とはアプリのビルド終了後、リリースする直前に任意のコマンドが実行できるというもの
Procfileに
release: bin/rails db:migrate
とするだけでHeroku側でマイグレーションしてくれる。
ちなみにRelease Phase中になんらかの処理が失敗した場合にはデプロイが中止されるため、リリースに必須な処理を挟み込む際にも安心して利用できるとのことでした。
参考記事