2011-08-11 40 views
13

我已經查看了Rails的一些調度庫,並且我希望有一些幫助選擇它們,因爲沒有一個滿足我的要求。這是一個相當常見的用例:Rails中的動態作業調度

我們有很多報告,我們希望讓用戶在他們想要安排特定報告通過郵件發送給他們的時間和頻率時設置。用戶需要能夠查看他們計劃的報告列表,並且他們應該能夠取消或更改現有的計劃報告。計劃作業應該在服務器重新啓動後存活。目前,我並不擔心只在一組Rails服務器中的單個節點上運行作業。

  • Rufus scheduler看起來不錯,但我不得不編寫代碼來持續的工作和軌道重新啓動時重新啓動它們。
  • Delayed_job涉及持久性,但我看不出如何在定期運行的作業,除了可能在新的時間重新安排工作,當它運行
  • resqueresque-scheduler似乎很接近,但我想避免必須添加redis到我們的堆棧,我最終可能會試圖在rails中重新實現一些UI,以便用戶可以添加/刪除/管理作業,如果它可以使用與其餘部分相同的ActiveRecord後端應用程序。
+3

如何使用rufus創建delayed_jobs? – Zabba

回答

7

我會建議使用延遲::工作的實際工作,因爲它會自動處理持久性的用戶,可以使用delayed_jobs表管理(允許用戶修改/刪除工作,他們已經啓動)。

當涉及到自動調度作業時,您可以使用Clockwork gem。它由Heroku構建(如果我沒有弄錯),本質上允許你在ruby/rails應用中模擬/替換cron

有了上面的兩個庫,你已經覆蓋了所有的基礎。

+0

+1,使用delayed_job很長一段時間,上週增加了發條,一切都很順利,沒有任何打嗝。 – rubish

1

我會根據完全相同的原因決定使用resque。相反,我們也選擇了延遲工作,事實上,最後一件工作就是重新安排工作,以便下次再次運行。

-1

我的公司生產CloudQuartz(www.thecloudblocks.com),它允許您通過API安排作業,並在運行時得到回調。

它有一個Web UI向你展示工作,他們的趨勢和他們的狀態,但除非你使用API​​,否則這個UI將不會對你的客戶開放。希望你覺得這有幫助。