如何避免永久进程停止我的capistrano部署?

时间:2014-02-13 18:24:38

标签: ruby shell capistrano forever

我的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”和“&”选项。

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

1 个答案:

答案 0 :(得分:0)

我知道的一篇旧帖子,但这是我对它的看法

不要将NODE_ENV放入任务中,而是设置:default_env选项。

set :default_env, { NODE_ENV: "test" }

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

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

全部放在一起

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
编辑:一旦我点击保存,我记得我不得不提到我在谈论卡皮斯特拉诺3,以防你不是。