2014-02-13 37 views
0

我需要我的capistrano部署帮助。如何避免永久停止我的capistrano部署?

所有过程做工精细,直到它到达永远proccess推出。 永远的进程已经启动,但卡皮斯特拉诺进程仍然在这个任务。

这是我的任务:

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

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

+0

有没有来自'forever'命令的输出?你是否尝试手动从shell运行它? – bredikhin

+0

是的,永远为非设置输出两个警告--minUptime和--spinSleepTime和和信息消息进程运行。 –

+0

什么节点/ forever/linux版本?另外,您可以尝试将'package.json'中的正确版本永久捆绑并从'node_modules'调用它。 – bredikhin

回答

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 

编辑:只要我打救我记得我不得不提,我的情况下,谈论Capistrano的3你不是。