首页 文章

Heroku resque / clockwork 'No job defined for class'

提问于
浏览
0

我正在尝试使用Resque / Clockwork在Heroku上运行后台工作 .

在本地,作业按发条排队,并按照预期由Resque执行 . 在Heroku上,有时它可以工作......但是大多数时候Clockwork按预期排队工作,当Resque执行时,我得到一个失败的工作,错误'No job defined for class' .

通过Resque管理面板显示的确切错误是:

Worker 960f8a1b-cce9-497a-a7ab-9b40c166a600:2+1 on FEATURED_CATALOG_ITEMS_CACHE at 27 minutes ago     Retry or Remove
Class nil
Arguments nil
Exception Error
Error No job defined for class 'Workers::FeaturedCatalogItemsCacheWorker'

我的代码看起来像:

/app/models/workers/featured_catalog_items_cache_worker.rb

class Workers::FeaturedCatalogItemsCacheWorker

  @queue = :featured_catalog_items_cache

  def self.perform
    p 'do work' # there is more code here but edited for brevity
  end
end

/lib/clock.rb

require File.expand_path('../../config/boot',        __FILE__)
require File.expand_path('../../config/environment', __FILE__)
require 'clockwork'

module Clockwork
  every(2.minutes, 'Queueing FeaturedCatalogItemsCacheWorker job') { Resque.enqueue(Workers::FeaturedCatalogItemsCacheWorker) }
end

/lib/tasks/resque.rake

require 'resque/tasks'

task "resque:setup" => :environment do
ENV['QUEUE'] = '*'
end

Procfile

web: rackup -p $PORT
resque: env TERM_CHILD=1 bundle exec rake resque:work
clock: bundle exec clockwork lib/clock.rb

我错过了什么吗?

1 回答

  • -1

    也许在 /lib/clock.rb

    require 'Workers::FeaturedCatalogItemsCacheWorker'
    

    方案:

    require './config/boot'
    require './config/environment'
    require 'clockwork'
    require 'resque' 
    
     module Clockwork 
    
     handler do |job|
        puts "Running job : #{job}"
        Resque.enqueue(job)
      end 
    
     every(15.minutes, NewsRssReader )
    end
    

相关问题