【问题标题】:Best way to publish at specific time in Sitecore在 Sitecore 的特定时间发布的最佳方式
【发布时间】:2015-06-06 20:40:06
【问题描述】:

据我所知,开箱即用的 Sitecore 并没有提供在特定时间发布内容的方法。我的意思是一天中的确切时间。

据我了解,您可以通过设置间隔来打开发布代理...假设每半小时一次(自动发布频率似乎不是一个好主意)。然后你让你的作者对项目设置发布限制。当该限制通过时,该项目将在下一次发布代理运行时发布。对吗?

上述方案不允许在一天中的特定时间发布某些内容。如果我有一个页面需要在明天上午 8 点上线,它可能要到上午 8:30 左右才会上线,具体取决于时间间隔与上午 8 点的关系。我说的对吗?

最好的设置方法是什么,以便作者可以在一天中的特定时间发布项目?

【问题讨论】:

    标签: sitecore


    【解决方案1】:

    您在发布代理上是正确的。 Sitecore 的所有代理都是基于时间间隔的,不能保证在特定时间运行。您可以将时间间隔调低,但由于发布在大多数情况下是一项连续任务,如果您的时间间隔是 5 分钟,而您的网站发布需要 7 分钟,您将获得一堆发布作业(作为一个每 5 分钟排队一次)。

    保证在特定时间发布的唯一方法是让某人在该时间通过内容编辑器进行发布。在自动化方面,Sitecore 对此一无所知。在过去,时钟时间对于作业的运行至关重要,我曾看到 Windows 计划任务运行并点击网站上的 URL 来启动它。

    如果一天中的时间非常关键,您可以对内容采取的另一种方法是在基本模板上设置一个日期时间字段,然后在 ItemResolver 之后运行一个 httpBeginRequest 管道步骤。让该步骤读取现场时间,如果项目尚未“上线”,则读取管道。

    【讨论】:

      【解决方案2】:

      Sitecore Marketplace 中有一个用于此目的的模块:

      https://marketplace.sitecore.net/en/Modules/Automated_Publisher.aspx

      每当作者对某个项目设置发布限制时,该模块都会添加一个新的计划任务并在特定时间发布该项目。

      【讨论】:

      • 这似乎是最好的方法,但根据页面上的评论,它不适用于 7.2。我们正在运行 7.5(今年将升级到 8)。似乎有很多很棒的 Sitecore 模块很快就会过时并且没有升级。无赖。
      • @Scott 还有一个 SDN 论坛帖子说它适用于 7.2。我会试试的。否则,源代码也会上传到 Marketplace,因此请尝试自行构建。
      • @Scott 您仍然会遇到在确切时间发布的相同问题,您仍然会根据任务代理的时间间隔获得时间变化。
      【解决方案3】:

      您可以按照link 中的说明在特定时间触发任务,您必须为发布任务编写代码,例如:

      PublishOptions options = 
             new PublishOptions(master, web, PublishMode.Smart, 
             Sitecore.Globalization.Language.Parse("en"), DateTime.Now) 
                  {
                      Deep = true;
                  };
      
      Publisher publisher = new Publisher(options);
      publisher.PublishAsync();
      

      【讨论】:

        【解决方案4】:

        我也必须完成这项任务。您不能使用标准的站点核心调度程序,因为它们只运行 x 个周期,这可能会因站点核心的 Apppool 何时被回收等而有所不同。我最终跳过了以下篮球:

        在您的网站中构建一个类:

        public  class PublishCommand
        {
            public void RunFullPublish()
            {
                using (new SecurityDisabler())
                {
                    var source = Factory.GetDatabase("master");
                    var target = Factory.GetDatabase("web");
        
                    List<PublishOptions> options = new List<PublishOptions>();
                    foreach (Language language in source.Languages)
                    {
                        options.Add(new PublishOptions(source, target, PublishMode.Full, language, DateTime.Now));
                    }
        
                    PublishManager.Publish(options.ToArray());
                }
            }
        }
        

        这需要以某种方式在您的网站上公开。我建立了一个可以调用的网页。然后,您需要一种机制来调用网页。我写了一个powershell脚本(RunUrl.ps1):

        param([string]$url="https:/mywebsite/RunFullPublish.aspx")
        
        Write-Host "calling URL $url"
        $request = [System.Net.WebRequest]::Create($url)
        $response = $request.GetResponse()
        $response.Close()
        

        基于this answer的Powershell

        然后我可以使用标准 Windows 调度程序每隔 x 时间段调用一次 powershell 脚本。

        【讨论】:

          猜你喜欢
          • 2019-01-16
          • 1970-01-01
          • 1970-01-01
          • 2013-02-14
          • 1970-01-01
          • 2011-08-26
          • 1970-01-01
          • 2016-05-16
          • 1970-01-01
          相关资源
          最近更新 更多