2010-02-23 170 views
1

我有一個生成HTML,XML和CSV報告的控制器。用於這些報告的查詢需要一分鐘才能返回結果。Rails中的長時間運行任務

什麼是在後臺運行這些任務然後將結果返回給用戶的最佳方法?我看了看Backgroundrb。有什麼更符合我的需求的基礎?

回答

5

你可以看看使用DelayedJob爲你執行這些查詢,並有一個名爲「NotificationQueue」的附加表。作業完成後(使用其結果集),將結果集和進行查詢的人員的用戶ID存儲在NotificationQueue表中。然後在每個頁面加載(並且如果你願意的話,每15-20秒),輪詢該數據庫並查看是否有任何已完成的查詢。因爲你寫你的代碼,如果它將是一個延遲的工作,只是更改代碼做以下

DelayedJob真的很大:

#Your method 
Query.do_something(params) 

#Change to 
Query.send_later(:do_something, params) 

我們用它所有的工作時間,而且效果很好。

+0

我只是*崇拜*這種設計。 – 2010-02-23 18:15:22

+0

DelayedJob看起來很有希望,但是如何在使用ActiveRecord時存儲結果集? – Trevor 2010-02-24 00:50:03

+0

DelayedJob基本上運行您的應用程序的副本。它可以訪問你的數據庫,所以當你調用延遲的作業時,它會說:「好的,用這些數據運行這段代碼」。它將像常規函數一樣保存到數據庫中。 – 2010-02-24 01:55:29