如何在deploy.rb中将参数传递给Capistrano 3任务

时间:2014-02-05 22:36:20

标签: capistrano capistrano3

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

2 个答案:

答案 0 :(得分:4)

不确定before/after,但使用Capistrano 3,您始终可以使用rake语法并在其他任务中调用任务:

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

答案 1 :(得分: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