🚨
HerokuでWebsocketを起動するとエラーが出る(H10)
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が記述してあるファイルを指定します。
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
起動しました。良かったですな
参考
Discussion