【问题标题】:Resque caching active record calResque 缓存活动记录校准
【发布时间】:2013-02-12 02:51:54
【问题描述】:

我有一个简单的 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

【问题讨论】:

  • 我不明白的是,您正在从您的工作人员那里调用 Cupcake@bake,它再次将任务排入队列。对吗?
  • 对不起我的错误......它的一些功能......我已经编辑了它......重点是正在打印它,并且 updated_at 指向以前保存的时间,而不是最近的提交总是......
  • @Hari 太奇怪了,我想bakeafter_commit 块中被调用了你也看到[CACHE] 喜欢在你的日志中思考当你在resque 中执行Cupcake.find(cupcake_id) 时,理想情况下缓存不应该出现在图片中,因为 resque 毕竟不是 rails 进程
  • 是的,在 after_commit 中调用了 bake。我没有看到任何类似缓存的东西,并且每次数据库查询进入 SQL 日志时,都会发生在更新查询之后触发 after_commit 之后。 ..它仍然在获取旧对象..我完全不知道你,你这很奇怪:)

标签: ruby-on-rails activerecord redis resque


【解决方案1】:

您可以尝试使用此代码强制 resque 访问数据库

ActiveRecord::Base.uncached do
  @cupcake = Cupcake.find(cupcake_id)
end

未缓存在2.3.8中可用

这应该可以,除非问题不是真正的缓存问题。让我们知道它是否适合您。

【讨论】:

    【解决方案2】:

    我遇到了完全相同的症状

    深入挖掘后发现,我的问题出在命名范围内

    我有这样的事情在执行:

    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
    

    在你的 perform 方法结束时

    【讨论】:

      猜你喜欢
      • 2012-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-31
      • 2012-07-09
      • 2020-10-07
      • 2013-05-27
      • 2011-01-18
      相关资源
      最近更新 更多