10

是一个如何将参数传递给 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]"
4

2 回答 2

4

不确定before/after,但Capistrano 3您始终可以使用rake语法并从另一个任务中调用任务:

Rake::Task["mynamespace:mytask"].invoke(arg)
于 2014-02-06T23:53:20.977 回答
3

您可以使用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
于 2015-07-17T10:50:43.310 回答