2015-04-02 43 views
9

據我所知,開箱即用的Sitecore不會在特定時間發佈某些內容。我的意思是一天的精確時間。在Sitecore的特定時間發佈的最佳方式

據我所知,你可以通過設置一個間隔來打開發布代理......比方說,每隔半小時(似乎並不認爲自動發佈的頻率比它高)。然後你的作者設置了對項目的限制。當限制通過時,該項目在下次運行發佈代理時發佈。正確?

上述情況不允許在某天的特定時間發佈某些內容。如果我有一個頁面需要在明天上午8點才能上線,那麼可能直到上午8點半左右纔會生效,具體取決於間隔時間與上午8點的關係。我有這個正確嗎?

什麼是最好的方法來設置,使作者可以在一天中的特定時間發佈項目?

回答

5

你在發佈代理上是正確的。 Sitecore的所有代理都是基於時間間隔的,並且不保證在特定時間運行。您可以逐漸減小間隔,但由於發佈大多數情況下是連續任務,所以如果您的間隔時間爲5分鐘,並且您的網站發佈需要7分鐘時間,則會出現一堆發佈作業(如同一個作業每5分鐘放在隊列中)。

保證發佈的唯一方法是在特定時間通過內容編輯器進行發佈。自動化方面,Sitecore沒有這方面的東西。過去,時鐘對於工作來說至關重要,我已經看到Windows計劃任務運行並在網站上打開一個URL來啓動它。

如果一天中的時間很關鍵,您可以採用的另一種方法是在基本模板上使用日期時間字段,然後在ItemResolver之後運行httpBeginRequest管道步驟。如果該項目不是「現場」,那麼請在現場閱讀時間,然後閱讀有關管道的內容。

2

有一個在Sitecore的市場模塊此:

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

每次作家將發佈限制到一個項目,該模塊增加了一個新的計劃任務和出臺的具體時間的項目。

+1

這似乎是最好的方法,但根據頁面上的評論,它不適用於7.2。我們正在運行7.5(今年將升級到8)。似乎有很多很棒的Sitecore模塊很快就會過時並且不會升級。遊民。 – Scott 2015-04-02 17:16:38

+0

@Scott還有一個SDN論壇帖子,它說它可以在7.2上運行。我會嘗試它。否則,源代碼也會上傳到Marketplace,所以請嘗試自行構建。 – 2015-04-02 17:19:38

+1

@Scott在EXACT時你仍然會遇到與發佈相同的問題,你仍然會根據任務代理的時間間隔獲得時間變化。 – jammykam 2015-04-03 21:52:52

2

你可以按照這個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(); 
0

我不得不做這個任務還。您不能使用標準sitecore調度程序,因爲它們只運行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。基於this answer

param([string]$url="https:/mywebsite/RunFullPublish.aspx") 

Write-Host "calling URL $url" 
$request = [System.Net.WebRequest]::Create($url) 
$response = $request.GetResponse() 
$response.Close() 

PowerShell的話,我可以調用PowerShell腳本使用標準的Windows計劃的時間每x期限:PS1)。

相關問題