3

我有一段代码运行一些方法,我将该方法放在 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 方法中放置一些简单的 puts 语句来检查控件是否在方法内部传递,但似乎控件甚至没有在 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}

任何想法如何克服这个问题?

4

2 回答 2

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

为我工作:

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

Ruby: 3.0.3, Resque: 2.2.0, Resque-Scheduler 4.5.0, Rails:6.1.4.4

于 2022-01-27T14:32:24.290 回答