【发布时间】:2014-06-02 18:46:03
【问题描述】:
我在 Resque 中遇到了一个非常奇怪的错误。
- 我有 5 个工作人员正在运行,其中一个队列正在等待作业。
- 我有 1 种 Resque 工作者:MediaAnalyzer
这是世界上最奇怪的事情:有时(是的,有时)resque 找不到 MediaAnalyzer 类。
为什么有时?因为有时工作的处理完全没有任何问题。还有一些时候我得到了uninitialized constant MediaAnalyzer。更奇怪的是,如果我通过 resque-web 重试该工作,几次之后,终于找到并执行了工作人员......
所有工作人员都以相同的方式使用相同的命令启动(PID 和日志路径除外):
su -c "cd /myapp/current; bundle exec rake environment resque:work RAILS_ENV=production QUEUES=* BACKGROUND=yes PIDFILE=/myapp/current/tmp/pids/resque_worker.1.pid 2>&1 >> /myapp/shared/log/resque_worker.1.log" - rails
注意:即使在前台模式下在控制台上手动启动时,我也会遇到同样的错误。
我什至尝试通过 resque:setup 任务手动加载类:
task "resque:setup" => :environment do
require Rails.root.join("app/workers/media_analyzer").to_s
end
这不会导致错误,我可以在 require 之后使用类中的所有内容,我可以输出内容,因此实际调用了这个 rake 任务......但是 resque 以后加载这个类时一直失败。
最大的难点是这个bug真的是真的随机!
这里是异常回溯的粘贴箱:http://pastebin.com/jy5UakB8
尝试使用 resque 2.0,同样的问题。
如果你知道发生了什么,你就是个天才!
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4 rake resque uninitialized-constant