LoginSignup
5
3

More than 5 years have passed since last update.

Heroku で ポート指定しないタイプの Node.js アプリをデプロイする時につまづいたこと

Posted at

状況

  • 去年とあるきっかけで Amazon EC2 でインスタンスを立てた
  • 放っておくのももったいないしなと思い、半年前に Twitter bot を作った
    • RSS フィードやスクレイピングで更新を検知してツイートするだけの機能
    • Express などの Web フレームワークは使っていない
  • EC2 の無料枠がそろそろ終わるので Heroku へ移行しようと思った

つまづいた

Heroku へのデプロイ、起動までは問題なく進んだのですが、その後ログを見ると

heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch

と R10 エラーを吐いて止まっていました。
上の記事にあるように、Heroku ではポート番号を明示的に指定する必要がありますが、自分の作ったアプリで使っている cheerio-httpcli にも feedparser にもポートを指定する機能がありません。

解決法

このような場合は worker プロセスで走らせることで解決できます。

Procfile を作成し、以下の内容を記載。

Procfile
worker: node app.js

コンソールで以下のコマンドを実行。
(Heroku Toolbelt がインスコされていることが前提)

heroku scale web=0 worker=1

自分の場合はこの後何故か「package.json に起動時のコマンドねえぞ」と怒られたので以下の通り修正。

package.json
"scripts": {
    "start": "",
    "test": "echo \"Error: no test specified\" && exit 1"
}

これで無事に Heroku 上で Twitter bot を動かすことができました。

参考リンク

Process Types and the Procfile | Heroku Dev Center
Heroku:(Application Errorにならないための)Node.jsアプリのデプロイ入門 - Qiita

5
3
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
3