可以向Capistrano任务提供字符串列表吗?

时间:2011-08-18 00:26:04

标签: capistrano task

我有一个任务,除了单个值之外,'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

这显然不起作用,但希望它显示我在这里尝试的东西。

思想?

1 个答案:

答案 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