前提
- Rails アプリケーションを作っていて、Heroku にデプロイしている
- Review Apps 機能を利用した Pull Request ごとに新しく環境を立ち上げる仕組みを取り入れている
問題
Pull Request を受けて 新規に立ち上げられた環境にアクセスしてみると「Something went wrong.」でページが正常に表示されない
調査
当該環境のログを見てみると以下のようになっている
2018-03-15T03:20:37.329855+00:00 app[web.1]: LINE 1: SELECT "read_laters".* FROM "read_laters" 2018-03-15T03:20:37.329858+00:00 app[web.1]: ^ 2018-03-15T03:20:37.329859+00:00 app[web.1]: : SELECT "read_laters".* FROM "read_laters"): 2018-03-15T03:20:37.330081+00:00 app[web.1]: F, [2018-03-15T03:20:37.329987 #4] FATAL -- : [2a96fab4-2749-4022-8c26-580deaa5bf0a] 1: - @read_laters.each do |read_later| 2018-03-15T03:20:37.330085+00:00 app[web.1]: [2a96fab4-2749-4022-8c26-580deaa5bf0a] 2: p = read_later.url 2018-03-15T03:20:37.330087+00:00 app[web.1]: [2a96fab4-2749-4022-8c26-580deaa5bf0a] 3: 2018-03-15T03:20:37.330089+00:00 app[web.1]: [2a96fab4-2749-4022-8c26-580deaa5bf0a] 4: = form_tag(read_laters_bulk_push_path)
SQL 発行時点で既にエラーになってるっぽい
解決
試行・検証
Heroku CLI から heroku run rails db:migrate
を実行すると問題なくページが表示されるようになった
根本的な解決
Heroku はデプロイするときの段階として Release Phase が用意されているので、そこで db:migrate
が走るように設定する
Procfile を用意して、release 時の設定を記述する:
release: bundle exec rails db:migrate
(ドキュメントにもあるように、コマンドだけでなく Shell Script を実行するよう設定してもいい)