2010-12-15 44 views
1

我正在開發一個Rails 2.3.x應用程序,它需要異步運行一個長而慢的任務。在Rails中異步運行緩慢的任務?

延遲請求直到處理完成有點痛苦。我們很高興發送一個「好的,我們已經收到了,我們正在對此進行處理」式回覆客戶,然後在客戶離開後立即關閉工作。

所以我見過一些這樣做的方法(如分叉或使用cron),但似乎任務排隊系統可能是一個更好的主意。

這似乎是三個主要的有:

麻雀看起來特別有趣的是由於對Memcached它的支持,但我不想在沒有做出明智決定的情況下選擇一個。有沒有人有關於最佳實踐的見解?我很想聽聽你有關上述的經驗,尤其是使用這種方法或提到的圖書館的任何重大問題。也許有更好的方法來做到這一點,我完全錯過了?

就這樣:Rails 3.x現在不是一個選項,這需要Rails 2.3.x的工作。

謝謝!

+3

另請嘗試:[挖掘](https://github.com/jeffkreeftmeijer/navvy)和[delayed_job](https://github.com/tobi/delayed_job)與他們有良好的經驗,但沒有特別的見解 – iain 2010-12-16 01:10:13

+0

你可以隨時寫自己的。根據我的經驗,通過這樣做,您可以更好地瞭解自己的問題以及解決方案,並且它將完全滿足您的需求。比閱讀其他人的解決方案來解決他們自己稍有不同的問題花費的時間要好得多。 – maerics 2010-12-16 06:18:32

回答

1

我推薦delayed_job,特別是this fork and branch。我在rails 2.3.5上自己使用它,它運行良好。

它有一個導軌3支爲當你想升級,它可以與多個後端,它有一個可選的漂亮的語法:

Notifier.delay.deliver_signup @user 

順便說一句,只是分叉是一個錯誤,因爲你會發現fork沒有一個好的數據庫連接。

+0

嘿,謝謝你的見解。 :)使用2.0.0超過2.0.5的任何特定原因? – 2010-12-18 11:51:47

+0

我鏈接到的分支是爲rails 2和2.0.x版本,所以使用最新的 - 目前2.0.5。如果你使用捆綁器(好動作),你可以指定最新的2.0.x系列,說「gem delayed_job,〜> 2.0.5'」,它將匹配2.0.6,2.0.12等。 – gunn 2010-12-18 21:24:47