2014-02-05 94 views
10

Here是一个如何将参数传递给capistrano 3任务的教程。如何将参数传递给deploy.rb中的Capistrano 3任务

$ cap staging "task:invoke[arg]" 

如何我在deploy.rb使用:

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 

可与执行?以下不起作用。

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

回答

4

不确定before/after,但Capistrano 3你可以随时使用rake语法和另一个任务内调用任务:

Rake::Task["mynamespace:mytask"].invoke(arg) 
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 
+0

在第一个示例中使用Capistrano v3会返回“错误的参数数量(1代表2+)”。 – marcovtwout

+0

你能举个例子吗? “这是工作在我的机器上的” :) –

+0

在最新Capistrano的主,deploy.rb的底部: ''' 之前 “部署:更新” 别 #command这里 结束 ''' – marcovtwout