0

我一直在尝试让主管监视我的 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

在这一点上,我看不出我做错了什么,因为这似乎与此处概述的目录结构相同,所以我对解决方案是什么感到茫然。有任何想法吗?

编辑:

尝试后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)

我不确定是什么原因造成的。

4

1 回答 1

2

在调查了这个问题之后,看起来这个问题来自于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.

于 2012-08-28T23:07:05.397 回答