2014-04-08 71 views
0

我想用Resque/Clockwork在Heroku上运行后台作业。 Heroku resque/clockwork'No class defined for class'

在本地,作业被Clockwork排队并按预期执行Resque。在Heroku上,有时它可以工作......但大部分时间Clockwork会按预期排队工作,并且当通过Resque执行时,我得到一个失败的作业,出现错误'No class 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 

我错过了什么吗?

+0

的问题竟然是,有运行它自己的resque一个节点实例,但分享Redis的,他们都处理“ *'队列。节点正在拾取rails作业,并且出现'没有为类定义任何作业“的错误消息,并且rails正在拾取节点作业并以'错误的常量名称'错误。 – user3512281

回答

-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