LoginSignup
5
1

More than 1 year has passed since last update.

Goをherokuでデプロイした時にエラー: code=H10 desc="App crashed"が出た

Posted at

背景

やりたいこと:
・Goで立てたサーバーをLINEmessagingAPIに結びつけてBOTを作ろうとしている
・LINEmessagingAPIのWebhookに貼るためにherokuでサーバーをデプロイする

現状:
・localhostでは問題なく画面表示できている(エラーの出力等はなし)

・デプロイの方法はherokuの公式ドキュメントを参照してください

エラー:Application error

$ git push heroku master

上記コードでデプロイしようとしたところ

Heroku_Application_Error.png

デプロイ先のURLに飛ぶとこのような画面が表示されました。


エラーがログに残っているはずなので、画面に表示されている通り下記のコマンドをターミナルに打ってログを表示してみます。

$ heroku logs --tail


すると、以下のようなログが残っていました。

heroku[web.1]: State changed from starting to crashed
heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=fathomless-depths-28419.herokuapp.com request_id=c14072ee-8bea-471c-b1ae-79561e840c35 fwd="180.198.134.55" dyno= connect= service= status=503 bytes= protocol=https



このログをもとに、しばらく"heroku H10" "app crashed"のような単語で調べてみたのですが、

・webdynoの再起動
・アプリ自体の再起動
・再デプロイ

など、コードそのものに問題がなく解決するパターンもあるようです。


参考:
Herokuでクラッシュしたアプリの原因究明と再起動する方法 | SERVERSUS
HerokuでApplicationErrorが発生したときの対処法 - Qiita



しかし、私の場合、上記の方法を試しても解決しませんでした。

解決策

"go heroku H10"のようにネットで色々検索していたところ、こちらの記事 を発見しました

表示されているエラー文は同じで、回答の方を翻訳してみると、

herokuでアプリをデプロイする場合、ポート番号を指定することはできません。
webサービスのポート番号を8000などと指定することはできず、herokuがランタイムにポート番号を決定します。

どうやら、localhostのポート番号を自分で指定していると、herokuからアクセスできないらしい。


herokuが決定するポート番号に対応できるよう変更

変更前のコード

main.go
func main() {
    http.HandleFunc("/", helloHandler)
    http.HandleFunc("/callback", lineHandler)

    fmt.Println("http://localhost:5000 で起動中")

    //サーバ起動
    log.Fatal(http.ListenAndServe(":5000", nil))
}


http.ListenAndServe(":5000", nil)の部分を、以下のように変更

log.Fatal(http.ListenAndServe(":"+os.Getenv("PORT"), nil))


これで、herokuによって決定されたポート番号に対応できるようになりました。



今回はH10という同じエラーコードでも言語ごとにエラーの原因が違い、解決に時間がかかりました💧

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1