6

node.js アプリを heroku にデプロイしようとしていますが、フォアマンを使用してローカルで起動しようとすると、エラーが発生します: EADDRINUSE をリッスンします。私はnetstatを実行し、他に何も使用していないポートをgrepしました。ノードhttpサーバーとして直接実行すると、サーバーは問題なく起動します。

デプロイしようとしているアプリは mongo と redis を使用しています。これらのコンポーネントが Foreman から始まるサーバーに影響を与えるかどうかはわかりません。潜在的なバグを探すために私が見ることができる領域について何か提案はありますか?

foreman start
01:37:18 web.1  | started with pid 1835
01:37:18 web.1  | /usr/local/foreman/lib/foreman/process.rb:66: warning: Insecure world writable dir /usr/local in PATH, mode 040777
01:37:19 web.1  | events.js:72
01:37:19 web.1  |         throw er; // Unhandled 'error' event
01:37:19 web.1  |               ^
01:37:19 web.1  | Error: listen EADDRINUSE
01:37:19 web.1  |     at errnoException (net.js:863:11)
01:37:19 web.1  |     at Server._listen2 (net.js:1008:14)
01:37:19 web.1  |     at listen (net.js:1030:10)
01:37:19 web.1  |     at Server.listen (net.js:1096:5)
01:37:19 web.1  |     at Function.app.listen (/Users/craig/Documents/Sandboxes   /xxx/node_modules/express/lib/application.js:535:24)
01:37:19 web.1  |     at Object.<anonymous> (/Users/craig/Documents/Sandboxes/xxx/web.js:25:5)
01:37:19 web.1  |     at Module._compile (module.js:456:26)
01:37:19 web.1  |     at Object.Module._extensions..js (module.js:474:10)
01:37:19 web.1  |     at Module.load (module.js:356:32)
01:37:19 web.1  |     at Function.Module._load (module.js:312:12)
01:37:19 web.1  | exited with code 8
01:37:19 system | sending SIGTERM to all processes
SIGTERM received

ありがとう。

- 追加情報 -

procfile には、web: node web.js という 1 つのエントリしかありません。

リスナーを次のように設定しました。

var port = process.env.PORT || 5000;
app.listen(port, function() {
    console.log("Listening on " + port);
});
4

2 に答える 2

7

私は OS X でこれに遭遇しました。フォアマンがデフォルトでポート 5000 を選択しているように見えますが、これは Bonjour/mDNS/UPNP サービスと競合しているようです。(私が読んだことから。私はそれがどれであるかを選ぶのに時間をかけていません。)

ただし、コマンド ラインでポートを指定する、そこで指定されたポート番号で .foreman ファイルを作成するという2 つの方法で、フォアマンが使用するポートを変更できます。

幸運と幸せなコーディング!

于 2013-12-19T14:48:22.163 に答える