2012-04-03 1 views
4

모델 ID를 받아들이고 가져온 항목에 대한 메서드를 호출하는 간단한 resque 작업이 있습니다.활성 레코드 호출 캐싱 재 지정

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

는 I는 '인큐'방법을

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을 시도하고 더 나은 결과가 나오는지 확인하십시오.