我有一個Rails應用程序的N個dynos,並且我想對它們運行一個命令。有沒有辦法做到這一點?在所有的dynos上執行rails r "SomeRubyCode"
會執行嗎?有沒有辦法在所有Heroku dynos上運行命令?
我正在使用一個插件,每M分鐘與第三方同步。問題是,有時第三方服務會超時,我想再次運行它,而不必等待另外的M分鐘。
我有一個Rails應用程序的N個dynos,並且我想對它們運行一個命令。有沒有辦法做到這一點?在所有的dynos上執行rails r "SomeRubyCode"
會執行嗎?有沒有辦法在所有Heroku dynos上運行命令?
我正在使用一個插件,每M分鐘與第三方同步。問題是,有時第三方服務會超時,我想再次運行它,而不必等待另外的M分鐘。
No. One off命令(如heroku run bash
)在另一個一次性測功機上運行。你需要設置一些pubsub /消息隊列,所有的dynos都可以聽到這個消息來完成這個任務。 https://devcenter.heroku.com/articles/one-off-dynos
(問把我的意見變成一個答案......將藉此機會闡述。)
我不知道你的插件,需要做的,「同步」到一個什麼樣的細節第三方服務,但我將繼續假設插件基本上獲取Web應用程序以某種方式使用的一些臨時數據。
由於同步或讀取過程偶爾會失敗,並且您的Web應用程序依賴最新的數據,因此您需要手動運行「同步」過程的選項。目前,只有這樣才能從插件本身做到這一點,這意味着您需要在所有的dynos上運行一些代碼,正如其他人所指出的那樣,目前不可能。
我在以前,類似的情況做了什麼(從外部服務獲取分析)很簡單:
然後我進一步去和使用Heroku的簡單的調度,以執行所述搜索任務每ň分鐘試圖保持數據新鮮更新,並始終處於高速緩存(緩存過期設置爲略小於ñ分鐘),並減少發生數據獲取時可感知滯後的情況。我可以將緩存過期設置爲從不或大於n但這不是關鍵任務。
這樣,如果我沒有要確保被顯示的最新分析,我不得不這樣做要麼是一個)連接到Redis的和從緩存中,或刪除的項目(容易),B)只是heroku run rake task
。
再說一遍 - 如果你只是拉取需要在所有dynos之間共享的數據,這主要起作用。
這顯然不能反其道而行。例如,如果您有一個集中式服務,您希望定期發送指標(比如說,每個請求花費的時間)以逐個測試者爲基礎。想不到使用Heroku的簡單而優雅的方式(除了實時,還有所有需要的開銷)。
您的用例描述在這裏最有用。 – hgmnz 2013-02-15 19:30:24
我正在使用每N分鐘與第三方同步的插件。問題是,有時第三方服務會超時,我想再次運行它,而不必等待另外N分鐘的時間。 – Geo 2013-02-15 19:51:15
如何使用Redis作爲共享/分佈式內存(在應用程序級而不是插件級)?有一個計劃的rake任務「強制」插件同步並將結果存儲在緩存中,然後讓應用的其餘部分從緩存中獲取數據。如果同步失敗,您可以手動運行rake任務,而不用擔心運行哪個dyno。 – 2013-02-18 02:29:05