我尝试创建具有不同角色的任务:
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"
所有任务都被执行了,为什么?
答案 0 :(得分:0)
Capistrano Roles旨在将给定服务器(或多个服务器)与特定功能相关联,例如说“machine-a”是Web服务器而“machine-b”是数据库服务器,这是有用,因为某些任务只需要在某些机器上执行。
因此,当您运行Capistrano时,角色无意成为有条件地选择运行任务的机器的一种方式,它们只是选择应在哪台机器上运行哪些任务。
然而,有一个名为Multistage的Capistrano功能可能正是您所寻找的。它允许您根据要部署的“阶段”指定不同的服务器集(甚至将它们与不同的角色相关联)。因此,您可以拥有 a 和 b 阶段,每个阶段都有不同的服务器集,您可以使用这些服务器进行部署:
cap a foo:mytasks
cap b foo:mytasks