Ruby Capistrano:使用角色创建任务无效

Ruby Capistrano:使用角色创建任务无效,ruby,capistrano,Ruby,Capistrano,我尝试创建具有不同角色的任务: namespace :foo do task :mytasks, :roles => [:a, :b,] do task_a task_b end task :task_a, :roles => :a do run 'echo A' end task :task_b, :roles => :b do run 'echo B' end end 当我执行“mytasks”时,结果如下: $

我尝试创建具有不同角色的任务:

namespace :foo do
  task :mytasks, :roles => [:a, :b,] do
    task_a
    task_b
  end

  task :task_a, :roles => :a do
    run 'echo A'
  end

  task :task_b, :roles => :b do
    run 'echo B'
  end
end
当我执行“mytasks”时,结果如下:

$ cap -n ROLES=b foo:mytasks
  * 2013-03-01 16:59:14 executing `foo:mytasks'
  * executing "echo A"
  * executing "echo B"
所有任务都会被执行,为什么?

旨在将给定的服务器(或多个服务器)与特定功能关联起来,例如说“machine-a”是web服务器,“machine-b”是数据库服务器,这很有用,因为某些任务只需要在某些机器上执行

因此,在运行Capistrano时,角色并不是有条件地选择要在哪台机器上运行任务的方式,它们只是选择应该在哪台机器上运行哪些任务

然而,还有一个叫做Capistrano的功能,这可能就是你想要的。它允许您根据要部署到的“阶段”指定不同的服务器集(甚至将它们与不同的角色关联)。因此,您可以有ab阶段,每个阶段都有单独的服务器集,您可以使用以下方式部署这些服务器:

cap a foo:mytasks
cap b foo:mytasks