Resque工作者静默失败,没有日志或没有调试信息

时间:2012-05-30 08:34:26

标签: ruby-on-rails ruby-on-rails-3 redis resque

我有一段运行某些方法的代码,我将该方法放在self.perform中,如下所示

class StartWorker
@queue = :worker

 def self.perform
 puts "hello"
  Parser.find_all_by_class_name("Parser").first.sites.each do |s|
   site = Site.find(s.id)
   parser = Parser.new(site)
   parser.run
     end
     end
     end

如果我评论def self.perform并结束此操作并运行该文件它正确显示所需的结果但是当我尝试通过取消注释相同时将其作为后台任务时它会无声地失败进入resque面板显示没有。在命令提示符中也没有输出

我从resque-scheduler中排队,在我的resque_schedule.yml

start_worker:
cron: "55 6 * * *"
class: StartWorker
queue: worker
args:
description: "This job starts all the worker jobs"

我尝试在def self.perform方法中放入一些简单的puts语句,以检查控件是否在方法内传递,但似乎控件甚至没有传递给self.perform方法

我也尝试加载rails环境并在其中需要resque但没有用 我已经运行了bundle exec rake resque:在进行任何更改之前,为上述所有操作QUEUE ='*'脚本

我在rails控制台中尝试了Resque.info,它显示如下,

 {:working=>0, :queues=>1, :failed=>1, :environment=>"development", :servers=>["redis://localhost:6379/0"], :pending=>0, :processed=>1, :workers=>1}

任何想法如何克服这个?

1 个答案:

答案 0 :(得分:4)

  1. 您是否检查了resque-web面板以查看失败的作业是什么?
  2. 确保在任何更改后重新启动工作程序。
  3. 如果你没有在你的日志中看到'hello'(特别是log / worker.log或你的登录地点),那么这个功能就不会发生了。
  4. bundle exec rake resque:work QUEUE='*'应为bundle exec rake resque:work QUEUE=* ,只是因为你真的引用了通配符。