Spring InitializrのようにMicroProfileのプロジェクトを作れるMicroProfile Starterについて先日ブログを書きました。
kikutaro777.hatenablog.com
このStareterで作ったWebアプリをHeroku上で動かしたいなと思ったのですが、デプロイしてサーバ起動後にError R10 (Boot timeout)エラーとなりました。
解決方法
localhostを0.0.0.0に書き換えるで解決しました(^^;
色々調べたところ最終的に以下のページにたどり着きました。
stackoverflow.com
上記の中にコメントがあるのですが、localhostの定義を0.0.0.0にすると動くとのことです。さっそくproject-defaults.ymlを開いて、以下の修正をしました。
# A project defaults for use with MP-JWT auth-method that include additional role mapping
swarm:
bind:
#address: localhost
address: 0.0.0.0
これでデプロイしたらエラーは発生せず、画面にアクセスできました。
MicroProfile Starterのサンプル
めでたしめでたし。
しかしなぜこうしなければならないのか…。node.jsの例ですが、Herokuの公式でもlocalhostじゃなくて0.0.0.0にしてね、というのがありましたが、理由がイマイチわかっていないです…。
help.heroku.com
Herokuにアップするためにやったことは次のとおりです。
Procfileの追加
以下内容のProcfileを追加しました。
web: java $JAVA_OPTS -Dswarm.http.port=$PORT -jar target/microprofilesample-thorntail.jar
ポートの指定方法は、HerokuのページにちゃんとThorntailの例がありました。素晴らしい。
Setting the HTTP Port for Java Applications | Heroku Dev Center
これでデプロイしたところThrontail is Readyになったあと、しばらくするとCrashしました。エラーは次の内容です。あとは冒頭の「解決方法」を参照してください。
Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 90 seconds of launch