2013-01-07 48 views
2

當前正在運行一個擁有100多個租戶的站點,並且必須手動啓用所有模塊。有沒有辦法在所有租戶的果園中啓用所有模塊,而無需前往每個站點並單擊啓用或手動使用命令提示符。我也有同樣的問題將內容部署到多個站點。我的設置是獨特的,我爲每個租戶有不同的數據庫。在所有租戶上啓用果園模塊,而無需手動進行。

回答

1

下面是我如何從模塊的遷移類中啓用/禁用功能的示例。你可以做的是創建一個命令行實現(從DefaultOrchardCommandHandler繼承),它將扇出你的啓用/禁用模塊命令給所有租戶。

我不確定tenant系統是如何在命令行中工作的,我想你可能必須爲每個租戶啓動一個單獨的命令行bin \ orchard.exe會話。如果是這種情況,您可以在調用bin \ orchard.exe的腳本中進行扇形化。如果您可以通過bin \ orchard.exe的單個會話爲不同租戶執行特定於租戶的命令,則可以在Commands類中進行扇形化。

[UsedImplicitly] 
public class Migrations : DataMigrationImpl { 

    public int UpdateFrom2() { 
     var features = _moduleService.GetAvailableFeatures().ToDictionary(m=>m.Descriptor.Id, m=>m); 

     DisableFeature(features, "TinyMce"); 
     EnableFeature(features, "TinyMceDeluxe"); 
     EnableFeature(features, "Contrib.Cache"); 
     EnableFeature(features, "WebAdvanced.Sitemap"); 

     return 3; 
    } 

    private void DisableFeature(Dictionary<string, Orchard.Modules.Models.ModuleFeature> features, string featureId) { 
     if (features.ContainsKey(featureId) && features[featureId].IsEnabled) { 
      _moduleService.DisableFeatures(new string[] { featureId }); 
     } 
    } 

    private void EnableFeature(Dictionary<string, Orchard.Modules.Models.ModuleFeature> features, string featureId) { 
     if (features.ContainsKey(featureId) && !features[featureId].IsEnabled) { 
      _moduleService.EnableFeatures(new string[] { featureId }); 
     } 
    } 
} 
+0

否否,命令行上的所有命令都採用可指定特定租戶的可選參數。將其與CLI運行批次的能力結合起來,你就可以得到答案。 –

+0

@Bertrand,這是已經納入我的答案。這就是爲什麼我要說取決於控制檯Orchard會話是否特定於租戶,您可以在Commands類中進行扇形化,也可以從命令行進行。 –

+0

是的,我只是回答不確定性:) –