如何让sshkit执行最终命令

时间:2014-12-07 15:21:43

标签: rake capistrano rake-task sshkit

我想创建一个能够执行任务并将所有命令包装在另一个命令中的gem。

例如, capistrano3-unicorn gem unicorn:start任务将在服务器上执行类似bundle exec unicorn -c unicorn.rb -E production的任务,但执行方法由内部方法包装,因此要在服务器上执行的命令类似于cd /home/deploy/application/myapp/current && bundle exec unicorn -c unicorn.rb -E production

我希望能够创建一个rake任务,该任务接受unicorn:start任务并将其包装在另一个任务中。

例如,如果我想为应用创建一个upstart配置文件,我可以将此命令添加到upstart.conf模板并运行service my-unicorn-app start

这将是我试图追求的用例。

在SSHKit格式化程序中,使用命令arg调用write命令,该命令具有我正在寻找的内容。但我需要在capistrano任务级别。

由于

1 个答案:

答案 0 :(得分:0)

我认为您要问的是如何访问通过SSH发送的确切命令。您要查找的是#command方法,其返回值可以调用#to_command。由于#command是私有方法,因此我们需要使用#send

namespace :unicorn
  task :set_restart_command do
    on(roles(:web)) do
      within release_path do
        set(:unicorn_start_command, 
          send(:command, :unicorn, "-c unicorn.rb -E production").to_command)
      end
    end
  end  
end

现在,在另一项任务中,您可以使用fetch(:unicorn_start_command)