🚨

HerokuでWebsocketを起動するとエラーが出る(H10)

2024/11/06に公開

node.jsのexpress、websocketを使用したwebアプリケーションを開発しました。Herokuにデプロイ後、アクセスするとエラーが出ました。

アプリ側に問題があるらしく、コマンドからログを確認します。

H10エラー

2024-11-02T14:26:28.809913+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=~ request_id=~ fwd="~" dyno= connect= service= status=503 bytes= protocol=https
2024-11-02T14:26:29.390331+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=~ request_id=~ fwd="~" dyno= connect= service= status=503 bytes= protocol=https

のエラーが確認できました。やはりアプリのエラーらしいです。

appを再起動しました。

$ heroku restart

治りませんでした。

余談

npm error Missing script: "start"

2024-11-02T13:47:02.638814+00:00 heroku[web.1]: Starting process with command `npm start`
2024-11-02T13:47:03.394003+00:00 app[web.1]: npm error Missing script: "start"

まずはこれです。そもそもスタートコマンドが違いました。

カレントディレクトリにProcfileを作成し、web: node index.jsを書きます。
appが起動した際にこのコマンドが開始されます。つまりはexpressが記述してあるファイルを指定します。

https://devcenter.heroku.com/ja/articles/nodejs-support#default-web-process-type

package.jsonのscripts.startよりProcfileのほうが優先されるようです。

Procfileを作成しなくても、package.json

"scripts": {
  "start": "node server.js"
}

を記述するだけで大丈夫そうです。

余談ですが、OverviewのDyno formationにスタートコマンドが記載してあるので確認できます

Error: Cannot find module 'express'

依然としてH10エラーが出ます。やはりここでしょうか

2024-11-03T16:31:36.195855+00:00 app[web.1]: Error: Cannot find module 'express'

この状態だとappが起動を繰り返しています。package.jsonのdependednciesがよくないらしいです。

before
"dependencies": {
    "http-server": "^14.1.1",
    "express": "^4.17.1",
    "ws": "^8.2.3"
},
"devDependencies": {
    "express": "^4.19.2",
    "fs": "^0.0.1-security",
    "http": "^0.0.1-security",
    "ws": "^8.17.0"
}

あまり管理していなかったのでぐちゃぐちゃになってます。
devDependenciesに書いてあるモジュールは本番環境では削除される仕様らしいですが、それが関係しているのですかね。。?それかバージョン系かな?って感じです。
http-serverは過去に試しただけのやつなので現状使っていません。

after
"dependencies": {
    "express": "*",
    "body-parser": "*",
    "ws": "*"
}

これだけにしました。

無事起動

2024-11-05T15:22:03.000000+00:00 app[api]: Build succeeded
2024-11-05T15:22:03.509260+00:00 app[web.1]: listen for 29000

起動しました。良かったですな

参考

https://stackoverflow.com/questions/36112119/heroku-deployment-with-express-js-is-not-happening

Discussion