ruby-on-rails - Resque缓存事件记录调用

标签 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”方法从 Controller 操作中将其排队

def bake
  Resque.enqueue(CupcakeWorker, params[:cupcake_id])
  render :json => 'Baking...'
end

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

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

最佳答案

这个答案有点粗糙,但可以工作。在进行任何处理之前,您可以在 ActiveRecord 模型上调用 reload。这会强制 ActiveRecord 更新数据。

然后 worker 看起来像这样:

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

不过,恐怕我不知道为什么 Resque 会这样做。尝试 Sidekiq看看你是否能得到更好的结果。

关于ruby-on-rails - Resque缓存事件记录调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9995599/

相关文章:

ruby-on-rails - OAuthException : This authorization code has been used - Facebook

ruby-on-rails - 如何将用户设置为管理员 [rails]

ruby-on-rails - Ruby:-查找文件中某个字符的出现次数

ruby-on-rails - 手动更新模型后更新数据库/迁移?

ruby - 带有 Ruby 脚本的 ActiveRecord,没有 Rails,连接池超时

ruby-on-rails - 定义 ActiveRecord 关联时,foreign_key 和 primary_key 有什么区别?

ruby-on-rails - 在 ubuntu 服务器启动时启动 unicorn 应用程序服务器

ruby-on-rails - 将通过 Mailgun 通过电子邮件发送和处理的信息保存到我的应用程序中

ruby - 使用 Rails 3 从现有表生成模型

ruby-on-rails - 如何为开发和生产指定不同版本的 gem