0

I try to create tasks with different roles :

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

When i execute 'mytasks' here is the result :

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

All tasks get executed, why ?

4

1 回答 1

0

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

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

但是,您可能正在寻找另一个名为Multistage的 Capistrano 功能。它允许您根据要部署到的“阶段”指定不同的服务器集(甚至将它们与不同的角色相关联)。因此,您可以有ab阶段,每个阶段都有单独的服务器集,您可以使用以下方法进行部署:

cap a foo:mytasks
cap b foo:mytasks
于 2013-03-04T06:57:38.600 回答