有没有办法在Mina的服务器上执行命令的结果?

时间:2016-01-21 19:43:52

标签: ruby-on-rails deployment unicorn

我正在将我的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字符串是在客户端而不是服务器端执行的。)

那么,我该怎么办?

1 个答案:

答案 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