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

问题描述 投票:0回答:2

我有一段运行某些方法的代码,我已将该方法放入 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_schedule.yml 中的 resque-scheduler 中对此进行排队

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

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

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

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

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

有什么想法可以克服这个问题吗?

ruby-on-rails ruby-on-rails-3 redis resque
2个回答
4
投票
  1. 您是否检查过 resque-web 面板以查看失败的作业是什么?
  2. 确保在进行任何更改后重新启动工作人员。
  3. 如果您在任何地方的日志中都没有看到“hello”(特别是 log/worker.log 或您登录的任何地方),那么该功能根本就没有发生。
  4. bundle exec rake resque:work QUEUE='*'
    应该是
    bundle exec rake resque:work QUEUE=*
    ,以防万一您确实引用了通配符。

0
投票

为我工作:

Resque::Scheduler.configure do |c|
  c.verbose = Rails.env.development? # or just true
end

红宝石:

3.0.3
, 回复:
2.2.0
, Resque-调度程序
4.5.0
, 轨道:
6.1.4.4

© www.soinside.com 2019 - 2024. All rights reserved.