#背景
やりたいこと:
・Goで立てたサーバーをLINEmessagingAPIに結びつけてBOTを作ろうとしている
・LINEmessagingAPIのWebhookに貼るためにherokuでサーバーをデプロイする
現状:
・localhostでは問題なく画面表示できている(エラーの出力等はなし)
・デプロイの方法はherokuの公式ドキュメントを参照してください
#エラー:Application error
$ git push heroku master
上記コードでデプロイしようとしたところ
デプロイ先の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"```のようにネットで色々検索していたところ、[こちらの記事 ](https://stackoverflow.com/questions/32463004/heroku-go-app-crashing)を発見しました
表示されているエラー文は同じで、回答の方を翻訳してみると、
herokuでアプリをデプロイする場合、ポート番号を指定することはできません。
webサービスのポート番号を8000などと指定することはできず、herokuがランタイムにポート番号を決定します。
どうやら、localhostのポート番号を自分で指定していると、herokuからアクセスできないらしい。
##herokuが決定するポート番号に対応できるよう変更
変更前のコード
func main() {
http.HandleFunc("/", helloHandler)
http.HandleFunc("/callback", lineHandler)
fmt.Println("http://localhost:5000 で起動中")
//サーバ起動
log.Fatal(http.ListenAndServe(":5000", nil))
}
log.Fatal(http.ListenAndServe(":"+os.Getenv("PORT"), nil))