【问题标题】:Is it necessary to use Forever.js on OpenShift?有必要在 OpenShift 上使用 Forever.js 吗?
【发布时间】:2014-06-24 19:18:43
【问题描述】:

我已经在 OpenShift 的免费层上部署了我的第一个 Node.js 应用程序,它运行良好。

OpenShift 会在我的 Node 应用程序崩溃时自动重启它,还是我必须设置 Forever.js?我尝试设置它,但它不起作用。运行node_modules/forever/bin/forever start app.js(工作目录为app-root/repo,本地副本为forever)后,我得到了以下输出:

warn:    --minUptime not set. Defaulting to: 1000ms
warn:    --spinSleepTime not set. Your script will exit if it does not stay up for at least 1000ms
info:    Forever processing file: app.js

fs.js:240
  return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode);
                 ^
Error: ENOENT, no such file or directory '/var/lib/openshift/5397416f5004466c0b000080/.forever/VQMF.log'
    at Object.openSync (fs.js:240:18)
    at Object.startDaemon (/var/lib/openshift/5397416f5004466c0b000080/app-root/runtime/repo/node_modules/forever/lib/forever.js:406:14)
    at /var/lib/openshift/5397416f5004466c0b000080/app-root/runtime/repo/node_modules/forever/lib/forever/cli.js:258:13
    at /var/lib/openshift/5397416f5004466c0b000080/app-root/runtime/repo/node_modules/forever/lib/forever/cli.js:145:5
    at Object.oncomplete (/var/lib/openshift/5397416f5004466c0b000080/app-root/runtime/repo/node_modules/forever/lib/forever.js:358:11)

那么,OpenShift 是否会为我管理我的应用程序的运行状况,还是我需要让 Forever 正常工作?如果是这样,对我得到的错误有什么想法吗?

【问题讨论】:

  • 完美的问题,正是我需要知道的从 Modulus 迁移过来(这也会重新启动您的应用程序)。 Modulus 还可以选择向您发送电子邮件,有人知道 OpenShift 是否可以这样做吗? (看起来 node-supervisor 没有那个选项)

标签: javascript node.js openshift forever


【解决方案1】:

是的,OpenShift 会在您的 Node 应用程序崩溃时自动重新启动它。 OpenShift 不使用 forever.js,但它使用 node-supervisor。您可以通过要求不存在的东西来测试它。快速修复它,因为日志可以快速增长重新启动应用程序。这是 OpenShift 上 nodejs.log 中的日志,表明它正在运行 node-supervisor:

DEBUG: Running node-supervisor with
DEBUG:   program 'server.js'
DEBUG:   --watch '/var/lib/openshift/53a9e06ae0b8cde26300008e/app-root/data/.nodewatch'
DEBUG:   --ignore 'undefined'
DEBUG:   --extensions 'node|js|coffee'
DEBUG:   --exec 'node'
DEBUG: Starting child process with 'node server.js'
DEBUG: Watching directory '/var/lib/openshift/53a9e06ae0b8cde26300008e/app-root/data/.nodewatch' for changes.

【讨论】:

  • 有趣,那个日志在哪里?它是否为此使用mainscripts.start
  • 使用您应用程序下 openshift 站点中的命令字符串 SSH 到系统上。然后 cd app-root/logs,所有的日志都在那里。我确定他们正在使用脚本进行部署,因为在启动应用程序之前启动/安装/设置了很多东西......我还没有真正深入研究它以查看它是哪个脚本。
【解决方案2】:

目前,OpenShift 的默认行为包括使用 supervisor 来启动、监视和重新启动您的 nodejs 应用程序。

以下是 nodejs 的各种初始化选项的简要概述:

  1. 如果您的应用包含有效的 package.json 文件和 main 条目 (containing the name of your server script),则 OpenShift 将使用 supervisor 启动该脚本来初始化您的应用。
  2. 如果您的应用程序包含 force_npm_deploy marker file.openshift/markers/use_npm 中的一个空文件),那么 OpenShift 将只运行 npm start。这将运行您的 package.json 文件的 scripts.start 实体中定义的任何内容。
  3. 如果所有其他方法均失败,OpenShift 将尝试使用 supervisor 运行 server.js(作为备用选项)。

这里有一些额外的注释:https://www.openshift.com/blogs/10-reasons-openshift-is-the-best-place-to-host-your-nodejs-app#npm

【讨论】:

  • 谢谢,这也很有帮助。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-04
  • 2013-11-03
  • 2017-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-09
相关资源
最近更新 更多