何かやってみるブログ

興味をもったこと、趣味のこと、技術について色々書きます。

[Herokuメモ] Goで作成したginのアプリケーションをHerokuへデプロイした時に発生したWeb process failed to bind to $PORT within 60 seconds of launch について

デプロイしてみたアプリと経緯

以下のチュートリアルで作成した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が追加した環境変数からポート番号を取得する必要がある。

stackoverflow.com

修正

ポートを環境変数から取得するように修正

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
  }
]