2
當前正在運行一個擁有100多個租戶的站點,並且必須手動啓用所有模塊。有沒有辦法在所有租戶的果園中啓用所有模塊,而無需前往每個站點並單擊啓用或手動使用命令提示符。我也有同樣的問題將內容部署到多個站點。我的設置是獨特的,我爲每個租戶有不同的數據庫。在所有租戶上啓用果園模塊,而無需手動進行。
當前正在運行一個擁有100多個租戶的站點,並且必須手動啓用所有模塊。有沒有辦法在所有租戶的果園中啓用所有模塊,而無需前往每個站點並單擊啓用或手動使用命令提示符。我也有同樣的問題將內容部署到多個站點。我的設置是獨特的,我爲每個租戶有不同的數據庫。在所有租戶上啓用果園模塊,而無需手動進行。
下面是我如何從模塊的遷移類中啓用/禁用功能的示例。你可以做的是創建一個命令行實現(從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 });
}
}
}
否否,命令行上的所有命令都採用可指定特定租戶的可選參數。將其與CLI運行批次的能力結合起來,你就可以得到答案。 –
@Bertrand,這是已經納入我的答案。這就是爲什麼我要說取決於控制檯Orchard會話是否特定於租戶,您可以在Commands類中進行扇形化,也可以從命令行進行。 –
是的,我只是回答不確定性:) –