我有一个任务,除了单个值之外,'run'中的命令是相同的。该值不在潜在值列表中。我想要做的是创建一个任务,使用这个值列表来定义任务,然后在'run'中定义的命令中使用相同的值。关键是,以这样一种方式定义任务会很棒,我不必为每个值重复几乎相同的任务定义。
例如:我想要一个任务,它将从我在数组中定义的程序列表中获取单个程序的状态。我想将任务定义为:
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 :(得分: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