デプロイしてみたアプリと経緯
以下のチュートリアルで作成したginを使用したアプリ go.dev
以下のように gin のリリースモードになるようにしてデプロイした。
gin.SetMode(gin.ReleaseMode)
調査
ログを見てみる。
heroku logs --tail
ログの一部を抜粋。
2022-03-03T10:18:31.003824+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch 2022-03-03T10:18:31.169027+00:00 heroku[web.1]: Stopping process with SIGKILL 2022-03-03T10:18:31.329697+00:00 heroku[web.1]: Process exited with status 137
原因
Herokuはポートを割り当てるらしい。対策としてはHerokuが追加した環境変数からポート番号を取得する必要がある。
修正
ポートを環境変数から取得するように修正
port := os.Getenv("PORT") router.Run(":" + port)
動作確認
うまくいった
curl heroku_url/albums | jq % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 383 100 383 0 0 443 0 --:--:-- --:--:-- --:--:-- 447 [ { "id": "1", "title": "Blue Train", "artist": "John Coltrance", "price": 56.99 }, { "id": "2", "title": "Jeru", "artist": "John Coltrance", "price": 17.99 }, { "id": "3", "title": "Sarah Vaughan and Clifford Brown", "artist": "Sarah Vaughan", "price": 39.99 } ]