2016-01-21 5 views
0

Я перемещаю приложение Rails для развертывания из Капистрано в Мину. Осталось только написать задачу для перезапуска сервера. Я уже сделал часть, чтобы запустить сервер, но я не могу понять, как остановить его.Есть ли способ получить результат выполнения команды на сервере в Мине?

Когда я использовал 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 команду, чтобы определить, существует ли файл, а затем запускается при необходимости команду убить. Я понимаю, как сделать все это в Мине, кроме как выполнить функцию 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

Решил, что будет проще просто запустить 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