0

我想创建一个能够执行任务并将所有命令包装在另一个命令中的 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

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

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

那将是我试图追求的一个用例。

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

谢谢

4

1 回答 1

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)

于 2015-07-08T20:02:31.050 回答