【问题标题】:Resque/Rails/Heroku: PG::Error: result has been clearedResque/Rails/Heroku: PG::Error: 结果已被清除
【发布时间】:2012-03-11 12:33:04
【问题描述】:

我正在尝试使 resque 与 heroku 一起工作。它适用于我的其他应用程序,但我不理解工作日志中的此错误:

PG::Error: result has been cleared: SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1

所以每当我将作业添加到队列中时,工作人员都会接受该作业并抛出上述错误。

这是工人阶级:

class Companies
  @queue = :companies

  def self.perform(current_user_id, model)
    @current_user = User.find(current_user_id)

    ... do things with @current_user and model...
  end
end

我使用以下命令调用执行操作:Resque.enqueue(Companies, current_user.id, 'quotes')

【问题讨论】:

    标签: ruby-on-rails postgresql heroku backgroundworker resque


    【解决方案1】:

    此错误消息表示用于与 Postgres 数据库交互的 PG gem 中存在内部错误。它表示垃圾收集/内存分配错误,执行的 postgres 查询的结果已在访问时从内存中清除。

    作为 heroku 的人将不得不对此进行调试,这似乎是一个平台级别的问题。

    【讨论】:

    • 虽然我同意您的诊断,但您认为这是 Heroku 平台级别问题的结论似乎不成立。 Heroku 不控制您使用的 pg 版本,也不控制您选择的 Web 服务器(Puma、Unicorn、Thin 等),这些都在那里产生影响。正如@wuputah 提到的,这通常可以在应用程序中通过更好地处理分叉/线程环境中的连接来解决。
    【解决方案2】:

    这通常与共享同一连接的多个进程/线程有关。您是否使用回调(after_forkbefore_hook)为每个作业重新连接到数据库?

    有关更多信息,请参阅: https://stackoverflow.com/a/5519372/66752

    【讨论】:

      猜你喜欢
      • 2018-06-18
      • 1970-01-01
      • 2012-12-16
      • 2013-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-03
      相关资源
      最近更新 更多