こんにちは、現役エンジニアの inno_tech です。
HerokuでNode.js(express)のWebアプリをデプロイしたところ、Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
というエラーが発生しました。
ちなみに、HerokuでNode.jsアプリケーションを公開方法の詳細はこちらにまとめているので参考にしてください。
本記事はUbuntu 20.04LTS / Node.js v16系 で動作を確認しております。
エラー原因 | ポート番号の不一致
まずはHeroku CLIからログを確認します。
# ログを確認
heroku logs --tail
# エラーログ
Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
冒頭に記載のように、Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
が発生しています。
調べてみると、Heroku起動時のポート番号 と アプリケーション(express)の起動ポート番号が一致しない場合のエラーだとわかりました。
Heroku上では動的にポートが決定される仕様であるため、環境変数から取得する必要があります。
対策 | 環境変数からポート番号を取得
expressサーバーを起動しているapp.js
のポート指定部分を書き換えます。
Node.jsの場合、process.env.PORT
で環境変数からポート番号を取得できるので、以下のようにすればOKです。
const http = require('http');
const express = require('express');
//(中略)
/* サーバーの起動 */
const server = http.createServer(app);
server.listen(process.env.PORT || 3000);
まとめ
今回のまとめです。
- Heroku上のアプリケーションは、動的にポート番号が割り当てられる
- プログラム上ではポート番号を環境変数から取得する
発売2ヶ月で15万部を突破した評判の書籍はこちら。数値化を意識することでボヤっとしていた仕事が具体的に捉えられるようになり、もっと前に進めるようになりますね。
参考になったでしょうか。
ほかにも役立つ情報が他のページにもあるかもしれません。
ご覧になるかはあなた次第です!
この記事がイイねと思ったら、Twitterフォロー か にほんブログ村のどちらかしてくれたら嬉しいよ!
コメント / ご要望