2012-04-03 51 views
4

我有一個簡單的resque作業,接受模型id,獲取它,然後調用獲取的項目上的方法。Resque緩存活動記錄調用

class CupcakeWorker 
    @queue = :cupcake_queue 
    def self.perform(cupcake_id) 
    @cupcake = Cupcake.find(cupcake_id) 
    @cupcake.bake 
    end 
end 

我排隊它從使用「排隊」的方法

def bake 
    Resque.enqueue(CupcakeWorker, params[:cupcake_id]) 
    render :json => 'Baking...' 
end 

作業隊列和正確執行的控制器的動作。但是,如果我在數據庫中修改記錄的數據並繼續對作業進行排隊,則操作不會使用新值執行。

我只能讓它獲取新的值,如果我重新啓動resque工作進程。恢復緩存對象?是否有辦法確保每次調用工作人員時都從數據庫中重新獲取?

回答

0

這個答案有點粗糙,但可以工作。在進行任何處理之前,您可以在ActiveRecord模型上調用reload。這迫使ActiveRecord更新數據。然後

工人應該是這樣的:

class CupcakeWorker 
    @queue = :cupcake_queue 
    def self.perform(cupcake_id) 
    @cupcake = Cupcake.find(cupcake_id).reload 
    @cupcake.bake 
    end 
end 

我怕我不知道爲什麼Resque可能會做這個,但是。嘗試Sidekiq,看看你是否得到更好的結果。