Как передать аргументы в Capistrano 3 задачи в deploy.rb

Здесь - это руководство по передаче параметров в задачу capistrano 3.

namespace :task do
  desc 'Execute the specific cmd task'
  task :invoke, :command do |task, args|
    on roles(:app) do
      execute :cmd, args[:command]
    end
  end
end

Может выполняться с помощью:

$ cap staging "task:invoke[arg]"

Как я могу использовать это в моем deploy.rb? Не работает.

before :started, "task:invoke[arg]"

Ответ 1

Не уверен в before/after, но с Capistrano 3 вы всегда можете использовать синтаксис rake и задачу вызова из другой задачи:

Rake::Task["mynamespace:mytask"].invoke(arg)

Ответ 2

Вы можете использовать метод invoke:

before :started, :second_param do
  invoke 'task:invoke', 'arg'
end

Также может быть полезно одно: capistrano и rake, позволяющие выполнять задачу только в первый раз, это может быть общей проблемой для задачи с параметрами, потому что вы можете повторно использовать ее с другим значением. Чтобы сделать это, вам нужно снова включить задачу:

namespace :task do
  desc 'Execute the specific cmd task'
  task :invoke, :command do |task, args|
    on roles(:app) do
      execute :cmd, args[:command]
      task.reenable                # <--------- this how to re-enable it
    end
  end
end