我在 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真的是真的随机!
这是异常回溯的pastebin:http: //pastebin.com/jy5UakB8
尝试使用 resque 2.0,同样的问题。
如果你知道发生了什么,你就是个天才!