我正在将我的Rails应用程序从Capistrano部署到Mina。剩下要做的唯一事情就是编写一个重启服务器的任务。我已经完成了启动服务器的部分,但我无法理解如何阻止它。
当我使用Capistrano时,我有以下任务:
desc 'Stop Unicorn'
task :stop do
on roles(:app) do
if test("[ -f #{fetch(:unicorn_pid)} ]")
execute :kill, capture(:cat, fetch(:unicorn_pid))
end
end
end
据我所知,首先运行test
命令来确定文件是否存在,然后根据需要运行kill命令。我知道如何在Mina中完成所有这些工作,除了如何在服务器上执行test
函数并获得其结果以便用它做什么。
以下是我现在正在使用的内容,
task :restart_server => :environment do
queue "cd #{deploy_to}/current"
if File.exists? unicorn_pid
queue "kill `cat #{unicorn_pid}`"
end
queue "bundle exec unicorn -c #{deploy_to}/#{shared_path}/config/unicorn.rb -E production -D"
end
但这不起作用,我想我理解为什么(因为File.exists
字符串是在客户端而不是服务器端执行的。)
那么,我该怎么办?
答案 0 :(得分:0)
决定从test
运行queue
功能会更容易,就像那样:
task :restart_server => :environment do
queue "cd #{deploy_to}/current"
queue "[ -f #{unicorn_pid} ] && kill $(cat #{unicorn_pid})"
queue "bundle exec unicorn -c #{deploy_to}/#{shared_path}/config/unicorn.rb -E production -D"
end