Capistrano:使用角色创建任务不起作用

时间:2013-03-01 16:07:41

标签: 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'时,结果是:

$ cap -n ROLES=b foo:mytasks
  * 2013-03-01 16:59:14 executing `foo:mytasks'
  * executing "echo A"
  * executing "echo B"

所有任务都被执行了,为什么?

1 个答案:

答案 0 :(得分:0)

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

因此,当您运行Capistrano时,角色无意成为有条件地选择运行任务的机器的一种方式,它们只是选择应在哪台机器上运行哪些任务。

然而,有一个名为Multistage的Capistrano功能可能正是您所寻找的。它允许您根据要部署的“阶段”指定不同的服务器集(甚至将它们与不同的角色相关联)。因此,您可以拥有 a b 阶段,每个阶段都有不同的服务器集,您可以使用这些服务器进行部署:

cap a foo:mytasks
cap b foo:mytasks