2011-08-18 69 views
0

我有一個任務,其'運行'命令是相同的,除了一個單一的值。這個值將超出潛在值的列表。我想要做的是創建一個任務,使用這個值列表來定義任務,然後在'run'中定義的命令中使用相同的值。關鍵是,以這樣一種方式定義任務是非常好的,我不必爲每個值重複幾乎相同的任務定義。是否可以向Capistrano任務提供字符串列表?

例如:我想要一個任務,它將從我在數組中定義的程序列表中獲取單個程序的狀態。我想定義的任務是這樣的:

set programs = %w["postfix", "nginx", "pgpool"] 
programs.each do |program| 
    desc "#{program} status" 
    task :#{program} do 
    run "/etc/init.d/#{program} status" 
    end 
end 

這顯然是不行的,但希望它說明了什麼,我試圖在這裏。

想法?

回答

0

嗯,我回答了我自己的問題......有一點點反覆試驗。我也對命名空間做了同樣的事情,所以對服務的控制很好,很優雅。它工作得非常好!

set :programs, %w[postfix nginx pgpool] 
set :init_commands, %w[status start stop] 

# init.d service control 
init_commands.each do |init_command| 
    namespace :"#{init_command}" do 
    programs.each do |program| 
     desc "#{program} #{init_command}" 
     task :"#{program}" do 
     run "/etc/init.d/#{program} #{init_command}" 
     end 
    end 
    end 
end 
相關問題