2013-03-01 33 views
0

我嘗試創建具有不同角色的任務: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

Capistrano Roles旨在給定的服務器(或多個服務器)與特定功能,如說關聯「機器a」是一個Web服務器,而「機器B」是數據庫服務器,這是因爲某些有用的任務只需要在某些機器上執行。

因此角色並不是有條件地選擇在運行Capistrano時運行任務的機器的方式,他們只需選擇應在哪些機器上運行哪些任務。

但是,有另一個名爲Multistage的Capistrano功能,可能是您正在尋找的功能。它允許您根據您部署的「舞臺」指定不同的服務器集(甚至將它們與不同的角色關聯起來)。所以,你可以有一個b階段,每一個單獨的服務器組,您可以部署使用:

cap a foo:mytasks 
cap b foo:mytasks 
+0

好,謝謝您的回答 – user1913545 2013-03-04 10:15:06

相關問題