我有一个简单的 resque 作业,它接受一个模型 ID,获取它,然后对获取的项目调用一个方法。
class CupcakeWorker
@queue = :cupcake_queue
def self.perform(cupcake_id)
@cupcake = Cupcake.find(cupcake_id)
p @cupcake
end
end
我从 Cupcake 的模型中排队,after_commit 使用 'enqueue' 方法
def bake
Resque.enqueue(CupcakeWorker, self.id)
end
作业排队并正确执行。但是,如果我在数据库中或通过 UI 修改记录的数据并继续将作业再次排队,则操作不会使用新值执行。
如果我重新启动 resque 工作进程,我只能让它获取新值。 resque 是否正在缓存对象?有没有办法确保每次调用 worker 时都从数据库中重新获取它?
编辑:
我什至提取了查询日志...提交发生在获取纸杯蛋糕的选择查询之前... 所以这既不是订单的竞争条件,也不是查询获取它时的缓存问题...... 是无知的家伙..那会是什么? 顺便说一句,我在 rails 2.3.8 和 redis n resque 组合中使用 after_commit gem
最佳答案
您可以尝试使用此代码强制重新请求命中数据库
ActiveRecord::Base.uncached do
@cupcake = Cupcake.find(cupcake_id)
end
未缓存在 2.3.8 中可用
这应该有效,除非问题不是真正的缓存问题。让我们知道它是否适合您。
关于ruby-on-rails - Resque缓存事件记录校准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15092766/