Можно ли предоставить список строк задачам 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

Это, очевидно, не работает, но, надеюсь, это показывает, что я здесь пытаюсь сделать.

Мысли?


person hinder90    schedule 18.08.2011    source источник


Ответы (1)


Ну, я ответил на свой вопрос... методом проб и ошибок. Я также сделал то же самое с пространством имен, чтобы управление службами было красивым и элегантным. Это работает очень хорошо!

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
person hinder90    schedule 18.08.2011