开发者

Can a list of strings be supplied to Capistrano tasks?

开发者 https://www.devze.com 2023-03-29 01:29 出处:网络
I have a task whose command in \'run\' is the same except for a single value. This value would out of a list of potential values. What I would like to do is create a task which would use this list of

I have a task whose command in 'run' is the same except for a single value. This value would out of a list of potential values. What I would like to do is create a task which would use this list of values to define the task and then use that same value in the command defined in 'run'. The point is that it would be great to define the task in such a way where I don't have to repeat nearly identical task definitions for each value.

For example: I want a task that will get the stat开发者_Go百科us of a single program from a list of programs that I have defined in an array. I would like to define task to be something like this:

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

This obviously doesn't work, but hopefully it shows what I am attempting here.

Thoughts?


Well, I answered my own question... with a little trial and error. I also did the same thing with namespace so the control of services is nice and elegant. It works quite nicely!

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
0

精彩评论

暂无评论...
验证码 换一张
取 消