Resque缓存活动记录调用

时间:2012-04-03 14:41:43

标签: ruby-on-rails ruby-on-rails-3 activerecord redis resque

我有一个简单的resque作业,它接受一个模型id,获取它,然后在获取的项目上调用一个方法。

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

我使用'enqueue'方法

从控制器操作中排队
def bake
  Resque.enqueue(CupcakeWorker, params[:cupcake_id])
  render :json => 'Baking...'
end

作业排队并正确执行。但是,如果我修改数据库中的记录数据并继续将作业排队,则操作不会使用新值执行。

如果我重新启动resque工作进程,我只能获取它来获取新值。是resque缓存对象?有没有办法确保每次调用worker时都从数据库中重新获取?

1 个答案:

答案 0 :(得分: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,看看你是否获得了更好的结果。