2012-08-28 39 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