[英]Resque caching active record cal
我有一個簡單的resque作業,它接受模型id,將其獲取,然后在獲取的項目上調用一個方法。
class CupcakeWorker
@queue = :cupcake_queue
def self.perform(cupcake_id)
@cupcake = Cupcake.find(cupcake_id)
p @cupcake
end
end
我使用'enqueue'方法從Cupcake的模型after_commit排隊
def bake
Resque.enqueue(CupcakeWorker, self.id)
end
作業排隊並正確執行。 但是,如果我在數據庫中或通過UI修改記錄的數據,並再次將作業排隊,則操作不會使用新值執行。
如果重新啟動resque worker進程,則只能獲取新值。 重新排序是否緩存對象? 有沒有辦法確保每次調用worker時都會從數據庫中重新獲取?
我什至拉出查詢日志...提交發生在獲取杯形蛋糕的選擇查詢之前。.因此,這既不是訂單的競爭條件,也不是查詢獲取時的緩存問題...笨笨。 。 會是什么呢? 順便說一句,我在rails 2.3.8中使用after_commit gem和redis n resque組合
我遇到了症狀完全相同的問題
深入研究后,我發現問題出在命名范圍內
我在表演中有這樣的事情:
letter = Letter.to_process.first
在模型中
scope :to_process, where("scheduled_at < ?", Time.now).where('finished_at IS NULL').order('scheduled_at')
這是錯誤的,因為它始終以與第一次執行命名范圍相同的schedule_at值運行
這是正確的
scope :to_process, lambda { where("scheduled_at < ?", Time.now).where('finished_at IS NULL').order('scheduled_at') }
如果這與您的情況沒有任何關系-如果您只是普通的find(id)有問題,請嘗試添加
Cupcake.connection.clear_query_cache
在執行方法的最后
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.