2014-12-07 30 views
0

我想創建一個能夠執行任務並將所有命令封裝在另一個命令中的gem。如何獲得由sshkit執行的最終命令

例如,capistrano3-麒麟寶石unicorn:start任務將執行在服務器像bundle exec unicorn -c unicorn.rb -E production,但執行方法通過一種方法內纏繞,因此在服務器上執行的命令將會像cd /home/deploy/application/myapp/current && bundle exec unicorn -c unicorn.rb -E production

我希望能夠創建一個耙子任務,該任務使用該任務並將其包裝在另一個任務中。

例如,如果我想創建一個應用程序新貴配置文件,我可以添加此命令將upstart.conf模板和運行service my-unicorn-app start

這將是一個使用情況下,我想追求。

在SSHKit格式化程序中,用命令arg調用write命令,該命令具有我在尋找的內容。但我需要在capistrano任務級別。

感謝

+0

對不起,我聽不懂你在問什麼。 「由任務產生的命令」?哪有這回事。任務(Rake/Capistrano)可以使用SSHKit在服務器上執行多個命令。 – 2014-12-09 08:44:33

回答

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)