2012-08-28 65 views
0

我一直在試圖讓我的nodejs服務器進程受到主管的監視,但是我遇到了使supervisord.conf工作的問題。當我部署,我收到以下錯誤:Dotcloud nodejs supervisord.conf不起作用

WARNING: The service crashed at startup or is listening to the wrong port. It failed to respond on port "node" (42801) within 30 seconds. Please check the application logs. 

然而,當我通過SSH進入dotcloud服務器和手動啓動該進程的NodeJS,它運行得很好,這表明主管未能啓動的節點實例。

我supervisord.conf看起來是這樣的:

[program:node] 
command = node /home/dotcloud/current/app/server.js 
autostart=true 
autorestart=true 

而且我的目錄結構如下:

.dotcloudignore 
dotcloud.yml 
.gitignore 
app/ 
app/package.json 
app/server.js 
app/supervisord.conf 

在這一點上,我看不出有什麼我做錯了,因爲這看起來與here概述的目錄結構相同,所以我對於解決方案有些遺憾。有任何想法嗎?

編輯:

嘗試過了supervisorctl status我得到如下:

node        FATAL  Exited too quickly (process log may have details) 

我發現,在/ var /日誌/主管,我收到以下錯誤信息:

module.js:337 
    throw new Error("Cannot find module '" + request + "'"); 
     ^
Error: Cannot find module '/home/dotcloud/current/app/server.js' 
    at Function._resolveFilename (module.js:337:11) 
    at Function._load (module.js:279:25) 
    at Array.0 (module.js:484:10) 
    at EventEmitter._tickCallback (node.js:190:38) 

我不確定是什麼原因造成的。

+0

服務器正在偵聽哪個端口? – jpetazzo

+0

它正在HTTP8080上偵聽,還有42801上的TCP,這是我通過environment.json文件分配的。服務器運行良好,如果我手動啓動它通過sshing進入dotcloud虛擬機。這個問題是與supervisord不自動啓動並重新啓動節點服務器 – blackbourna

+1

你爲什麼認爲它來自Supervisor?你是否嘗試過「supervisorctl status」來看看它說了些什麼? – jpetazzo

回答

2

調查問題後,看起來問題來自於dotcloud.yml指定approot: app這一事實。在這種情況下,需要注意的是:

  • /home/dotcloud/code將指向整個代碼存儲庫;
  • /home/dotcloud/current將指向該批准(更具體地,/home/dotcloud/current將是該批准的符號鏈接,即在該情況下爲code/app)。

因此,supervisord.conf不應該包含:

command = node /home/dotcloud/current/app/server.js 

但是,相反:

command = node /home/dotcloud/current/server.js 

的關鍵是在Node.js的日誌本身,因爲Node.js的是抱怨自己無法找到/home/dotcloud/current/app/server.js

+0

太棒了,非常感謝您的幫助 – blackbourna