2

目前正在运行一个拥有 100 多个租户的站点,并且必须手动启用所有模块。有没有办法在我的所有租户中启用果园中的所有模块,而无需前往每个站点并单击启用或使用命令提示符手动使用。我在将内容部署到多个站点时也遇到了同样的问题。我的设置是独一无二的,因为我为每个租户都有不同的数据库。

4

1 回答 1

1

下面是我如何启用/禁用模块迁移类中的功能的示例。您可以做的是创建一个命令行实现(从 DefaultOrchardCommandHandler 继承),它将您的启用/禁用模块命令分发给所有租户。

我不确定租户系统在命令行方面是如何工作的,我认为您可能必须为每个租户启动一个单独的命令行 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 });
        }
    }
}
于 2013-01-07T19:50:08.930 回答