我有一个简单的 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 是否正在缓存对象?有没有办法确保每次调用工作人员时都从数据库中重新获取?
编辑:
我什至提取了查询日志……提交发生在获取纸杯蛋糕的选择查询之前……所以这既不是订单的竞争条件,也不是查询获取它时的缓存问题……我是无能的家伙。 。 会是什么呢? 顺便说一句,我在 rails 2.3.8 和 redis n resque 组合中使用 after_commit gem