我一直在尝试让我的nodejs服务器进程由超级用户监控,但是我在使超级用户supervised.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 / log / supervisor中,我收到以下错误消息:
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)
我不确定是什么原因造成的。
最佳答案
在调查了该问题之后,看来该问题是由于dotcloud.yml
指定了approot: app
这一事实引起的。在这种情况下,需要注意以下几点:/home/dotcloud/code
将指向整个代码存储库;/home/dotcloud/current
将指向approot(更具体地说,/home/dotcloud/current
是指向approot的符号链接,即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
。