2016-07-06 89 views
1

我已經從Capistrano 2切換到Capistrano 3最近,很多改變了,我有一些麻煩試圖改變Capistrano 2在項目中使用Capistrano 2的新Capistrano我正在嘗試。Capistrano 3角色特定的任務

我目前面臨的最大問題是按角色過濾。我知道你可以這樣做:

ROLES=web,worker cap production deploy 

,但如果你有所有角色的單個服務器,似乎什麼也不做,真的。

隨着Capistrano的2我可以運行:

cap worker deploy 

和所有工作任務將被應用。 Capistrano 2具有在任務中指定的角色,並且如果角色未被請求,則任務被跳過(在大多數情況下)。然而,對Capistrano 3來說似乎並不是這樣,在多服務器環境中,每個角色都有特定的服務器時,過濾器非常棒。但是,如果服務器共享一個角色或者只有一個角色,它會變得有點奇怪。在新的Capistrano任務中,似乎要檢查是否存在具有給定角色的主機,而不是根據角色檢查任務是否應運行。在我看來,ROLES旨在限制服務器而不是任務。

所以我想知道這是否可能在Capistrano 3中。另一種查看方法是將名稱下的任務分組。我想選擇正在執行哪組任務。

我可以通過一些修補來達到這個目的,我可以檢查ROLES是否存在,並根據它來跳過任務,我可以根據角色選擇要加載的配方,我可以根據ROLES動態附加任務var,或者可能將任務分組到角色命名文件中,然後根據ROLES等進行動態加載,但也許有些東西我錯過了。

有什麼想法?

回答

0

在我看來,羅爾斯是用來限制服務器而不是任務。

是的,這是完全正確的。在Capistrano 3中,任務與角色無關。在任務中,命令可以在與特定角色匹配的服務器上執行。使用ROLES進行篩選時,可以限制運行命令的服務器,但不限制任務本身。

您可以限制任務的一種方法是定義您自己的調用所需任務的高級任務。

例如:

# In deploy.rb 
task "worker" do 
    invoke "task1" 
    invoke "task2" 
    # etc. 
end 

這定義了worker的任務,接着執行任務,它可以是任何你想要的特定列表。然後你可以運行:

cap production worker 

這將運行所有生產服務器上的這些工作相關的任務。

相關問題