2016-01-21 61 views
0

我感動我的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命令。我明白怎麼做的這一切,除了米娜如何執行服務器上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

決定這將是容易只是從queue運行test功能,這樣的:

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 
相關問題