2016-08-02 17 views
1

我一直在尋找一種解決方案,我的應用似乎並沒有在任何地方直接討論過。我的目標是發佈一個應用程序,並將其自動伸入我正在使用的服務器。這只是一個簡單的職位。我有一切工作正常,目前正在解決這個問題與cron作業,但它不是足夠的 - 我希望工作自動執行一旦應用程序已經發布,而不是一分鐘後(或無論指定的時間它可能會設置爲)。Google App Engine - 在發佈上運行任務

在概念中,我試圖讓我的應用程序向我的服務器註冊自己,並且爲此我希望它在發佈時運行一次,永遠不會再次運行。

有沒有解決這個問題的方法?我查看了任務隊列,不確定它是否正在尋找。

任何幫助將不勝感激。 謝謝。

+0

通過「發佈」,你的意思是當你部署一個新版本的應用程序,然後才?如果您的應用程序的新實例快速啓動,是否會導致POST請求?如果您只希望在發佈應用程序的新版本時發生這種情況,我會將其稱爲「部署掛鉤」,就像以下問題所示:http://stackoverflow.com/questions/4354647 –

+0

所需的行爲只有在應用程序的新版本已經部署。我想'部署鉤子'是可以用來討論這個問題的術語。我會調查這個線程,如果我找到解決方案,我會在這裏發佈。否則,只是假設我仍在努力。 – john14073

回答

0

主要問題將是如何確保它只對特定版本運行一次。

下面是你如何接近它的大綱。

您創建了一個HasRun模塊,您使用該模塊存儲已部署應用程序的每個版本,這表示是否已經運行了一個時間碼。

然後確保在您部署新代碼時增加版本。

在你熱身處理或appengine_config.py搶部署的版本,

然後在交易嘗試,通過鍵(版本號)獲取新的HasRun實體。

如果你得到了實體,那麼不要運行一次性代碼。 如果找不到它,那麼創建它並運行一次性代碼,或者在任務中(確保該過程是冪等性的,因爲任務可以重試)或者在預熱/正面臨請求中。

現在您可能想要將所有這些內容包含在memcache CAS操作中以提供鎖定或某種排序。爲了防止其他實例試圖做同樣的事情。

或者,如果您要使用任務隊列,請考慮將任務命名爲版本號,您只能提交一次具有特定名稱的任務。 它仍然需要冪等(再次可以安排重試),但只會有一個任務安排在該版本上 - 至少幾個星期。

或上述所有組合/變體。

2

就個人而言,這對我來說更有意義,因爲您是部署過程的責任,而不是應用程序本身。如果您有自己的部署腳本,請在那裏添加發布請求(成功部署後)。如果你使用谷歌的命令行工具,你可以把它包裝在腳本中。如果您使用第三方工具進行持續集成,則可能會有部署掛鉤可用於此目的。

相關問題