2013-09-25 52 views
6

我試圖將我的node.js應用程序部署到heroku,但是當我嘗試使用工頭在本地啓動它時,我得到Error:listen EADDRINUSE。我已經運行了一個netstat併爲端口grepped,沒有其他人使用它,並且直接作爲節點http服務器運行時服務器啓動時沒有問題。使用Heroku Foreman啓動Node.js應用程序時使用的端口

我想部署的應用程序使用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 

謝謝。

--Additional information--

的procfile剛剛有一個條目: 網站:節點web.js

,我已經設置了聽衆組成如下:

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

你想在特定的端口上啓動你的HTTP服務器嗎? (注意,每當你想在[tag:heroku]上啓動一個HTTP服務器時,你應該使用'process.env.PORT'作爲端口號。) – fardjad

+0

請發佈你的Procfile和node.ks應用配置 – Winfield

+0

請找到所需的附加細節以上在原帖 – Craig

回答

7

我剛剛在OS X上遇到了這個問題。它看起來像工頭默認選擇5000端口,這似乎與Bonjour/mDNS/UPNP服務衝突。 (從我讀過的東西,我沒有花時間挑出它是什麼)

但是,您可以通過兩種方式更改領班使用的端口:specify the port on the command linecreate a .foreman file with the port number specified there

祝你好運,快樂的編碼!

+3

丹尼爾是對的。例如,這對我有用:工頭啓動-p 8000所以我最終指定了端口號,它工作。 – zumzum

2

我有同樣的問題,Error: listen EADDRINUSE意味着節點服務器已經在運行。

檢查您是否在本地爲同一項目運行節點服務器。如果您在本地處理與Heroku綁定的GitHub同步項目(例如端口5000),則無法爲該項目運行本地節點服務器,因爲該端口將被使用兩次。

我實際上是在一個不同的終端窗口中的項目上運行節點服務器,並沒有立即注意到。

相關問題