【问题标题】:How can I avoid the forever process stop my capistrano deployment?如何避免永远停止我的 capistrano 部署的过程?
【发布时间】:2015-01-16 22:45:09
【问题描述】:

我的 capistrano 部署需要帮助。

所有进程都可以正常工作,直到永远启动进程。 永久进程已启动,但 capistrano 进程仍在执行该任务。

这是我的任务:

  desc 'Start application'
  task :start do
    on roles(:app), in: :sequence, wait: 5 do
      execute "cd #{current_path} && NODE_ENV=#{fetch(:application_env)} PORT=#{fetch(:application_port)} forever start -l #{current_path}/logs/logs.log -e #{current_path}/logs/err.log -o #{current_path}/logs/out.log -a #{current_path}/app.js", raise_on_non_zero_exit: false
    end
  end

我已经尝试过 "> /dev/null 2>&1" 和 " &" 选项。

我只需要永远挂断。 任何帮助将不胜感激。

【问题讨论】:

  • forever 命令有输出吗?您是否尝试过手动从 shell 运行它?
  • 是的,永远输出两个未设置的警告 --minUptime 和 --spinSleepTime 以及进程运行的信息消息。
  • 什么 node/forever/linux 版本?另外,您可以尝试在package.json 中捆绑正确版本的forever 并从node_modules 调用它。
  • 有关于这个问题的更新吗?
  • 不@ClaudioBertozzi :/

标签: ruby shell capistrano forever


【解决方案1】:

我知道一个旧帖子,但这是我的看法

不要将 NODE_ENV 放在你的任务中,而是设置一个 :default_env 选项。

set :default_env, { NODE_ENV: "test" }

然后你可以使用 exec 的符号。 execute :forever, "other options"

我还发现永远存在路径的怪癖,尤其是在尝试设置 pid 文件时。尝试使用-p 选项设置当前路径,然后您似乎不需要在pidFile 上添加当前路径except

把它们放在一起

set :default_env, {NODE_ENV: fetch(:application_env), ...}

desc 'Start application'
task :start do
  on roles(:app), in: :sequence, wait: 5 do
    execute :forever, "start -p #{release_path} -l logs/logs.log -e logs/err.log -o logs/out.log -a --pidFile #{release_path}/pidfile.pid app.js"
  end
end

编辑:当我点击保存时,我记得我必须提到我正在谈论 Capistrano 3,以防你不是。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-06
    • 1970-01-01
    • 2020-05-28
    • 2014-09-02
    • 1970-01-01
    相关资源
    最近更新 更多