为了运行Rpush,我已在config / deploy.rb中编写了此代码
after :publishing, 'deploy:restart'
after :finishing, 'deploy:cleanup'
after :finished, :restart_rpush do
on roles(:web) do
within release_path do
with rails_env: fetch(:rails_env) do
execute :bundle, :exec, "rpush stop -e #{fetch(:rails_env)}"
execute :bundle, :exec, "rpush start -e #{fetch(:rails_env)}"
end
end
end
end
end
在部署时,我收到此错误:
DEBUG [76ef4791] * Rpush isn't running?
/home/dev/proteqtor/releases/20150714065629/tmp/rpush.pid does not exist.
Rpush没有运行。 可能是此问题的原因?
我认为这是因为,由于Rpush没有运行,因此您将获得未捕获的异常来execute :bundle, :exec, "rpush stop -e #{fetch(:rails_env)}"
。 即,为什么不运行rpush stop
呢?
取而代之的是,首先测试(使用Capistrano 3的test命令 )pid文件是否存在于给定路径,并且仅在存在时才运行stop,否则运行start:
desc 'Restart rpush'
task :restart_rpush do
on roles(:web) do
within release_path do
with rails_env: fetch(:rails_env) do
if test('[ -f /path/to/my/pid/file ]')
# Rpush is running
execute :bundle, :exec, "rpush stop -e #{fetch(:rails_env)}"
execute :bundle, :exec, "rpush start -e #{fetch(:rails_env)}"
else
# Rpush is not running
execute :bundle, :exec, "rpush start -e #{fetch(:rails_env)}"
end
end
end
end
end
after :finished, :restart_rpush