起きたこと
RailsでWebAPIを作成しHerokuにデプロイしたつもりが、ブラウザの表示はこうなった↓
とりあえず$ heroku logs --tail
してねとあるので、
・
・ (省略)
・
2020-10-03T07:07:22.331249+00:00 app[web.1]: /usr/local/bundle/bin/puma:23:in `<top (required)>'
2020-10-03T07:07:22.468514+00:00 heroku[web.1]: Process exited with status 1
2020-10-03T07:07:22.527787+00:00 heroku[web.1]: State changed from starting to crashed
2020-10-03T07:07:23.246388+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=coko-api.herokuapp.com request_id=****** fwd=*******" dyno= connect= service= status=503 bytes= protocol=https
んー。。レスポンスが503なのはわかるけどもう少し踏み込んで$ heroku run rails c
すると、
・
・ (省略)
・
Could not load the 'mysql' Active Record adapter. Ensure that the adapter is spelled correctly in config/database.yml and that you've added the necessary adapter gem to your Gemfile. (LoadError)
お、MySQLの設定周りでエラーが起きてるようです。以下翻訳↓
'mysql' ActiveRecordアダプターをロードできませんでした。 アダプターのスペルがconfig / database.ymlで正しく設定されていること、および必要なアダプターgemがGemfileに追加されていることを確認してください。 (LoadError)
このエラーで調べていたところ、大体2パターンあったので、対処をまとめます。
パターン1. そもそもGemfile
に設定してない
ここまで気がつかないのは稀でしょうけれど、一応確認しておきましょう。
gem 'mysql2' # << 追記
修正したらデプロイ
パターン2. Herokuの環境変数にミス
Railsアプリでherokuを使うときのDBをMySQLに変更するを参考に環境変数を確認。
$ heroku config
=== coko-api Config Vars
CLEARDB_DATABASE_URL: mysql://***:***@***.cleardb.com/heroku_***?reconnect=true
DATABASE_URL: mysql://***:***@***.cleardb.com/heroku_***?reconnect=true
・
・ (省略)
・
一見合っているかと思いきや。。。
DATABASE_URL
の先頭がmysql2
じゃなくmysql
になってる!!
$ heroku config:set
で修正(CLEARDB_DATABASE_URL
の方はmysql
のままでOK)
$ heroku config:set DATABASE_URL='mysql2://***:***@***.cleardb.com/heroku_***?reconnect=true'
修正したら、デプロイせずにそのまま反映されます。
自作APIからのレスポンスを確認できました〜
僕の場合パターン2に引っかかってました。