2011-12-13 80 views
0

我正在使用Resque來運行後臺進程。這是我的後臺進程是如何工作的:關於使用resque的一些問題

  1. 掃描通過ActiveRecord模型中的所有行
  2. 檢查條件
  3. 更新,如果條件滿足

,這一點需要行無限地繼續下去。

這是我想使用Resque我的目的,這是我的工人類:

class ThumbnailMaker 
    @queue = :thumbnail_queue 

    def self.perform() 
    MyObj.check_thumbnails(root_url) 
    end 
end 

我明白perform()方法保持在隊列中,週期性運行任務。就我而言,我需要一個掃描整個表的任務,所以它運行時間更長。這是我的要求的一個很好的解決方案嗎?

在另一方面,我需要的根URL我的Rails應用程序,這是很容易與Rails的控制器的root_url獲得。但我在創建的課程中需要它,你能告訴我如何在這裏得到它嗎?

回答

1

Resque是排隊任務在後臺運行;隊列中的每個項目都會運行一次然後被刪除。你想要的更像是一個計劃任務 - 例如,custom Rake task或不時運行的其他腳本;有很多scheduling gems可用於這種事情(wenever是非常流行)或只是使用cron。關於這個話題有一個great RailsCasts episode

+0

對於你的'root_url'的問題,請參見[這太問題(http://stackoverflow.com/questions/341143/can-rails-routing-helpers-ie-mymodel-pathmodel-be-used-in-models ) –

1

你可能會想嘗試投入rake任務代碼並運行它定期通過cron作業。 Resque/Redis對於您的需求似乎有點過分。

您可以考慮通過根URL與爲參數,如果你是通過你的控制器調用類。否則,您可能希望將其設置爲ENV設置並相應地配置每個部署。