Dotcloud nodejs supervisord.conf不能正常工作

时间:2012-08-28 02:08:46

标签: javascript node.js deployment dotcloud supervisord

我一直在尝试让我的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.

然而,当我进入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)

我不确定是什么导致了这一点。

1 个答案:

答案 0 :(得分: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