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