【问题标题】:Heroku resque/clockwork 'No job defined for class'Heroku resque/clockwork '没有为班级定义工作'
【发布时间】:2014-05-21 15:29:48
【问题描述】:

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

在本地,作业由 Clockwork 排队,并按预期由 Resque 执行。在 Heroku 上,有时它可以工作......但大多数时候 Clockwork 会按预期将作业排队,当由 Resque 执行时,我得到一个失败的作业,并出现错误“没有为类定义作业”。

通过 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

过程文件

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

我错过了什么吗?

【问题讨论】:

  • 问题原来是有一个节点实例运行它自己的resque,但与rails共享redis,它们都处理'*'队列。节点正在获取 Rails 作业并出现“没有为类定义作业”的错误,Rails 正在获取节点作业并出现“错误的常量名称”的错误。

标签: ruby-on-rails ruby heroku resque clockwork


【解决方案1】:

也许在/lib/clock.rb

require 'Workers::FeaturedCatalogItemsCacheWorker'

解决方案:

需要'./config/boot' 需要'./config/environment' 需要“发条” 需要'resque'

模块发条

处理程序做|工作| 提出“正在运行的工作:#{job}” Resque.enqueue(工作) 结束

每(15 分钟,NewsRssReader ) 结束

【讨论】:

    猜你喜欢
    • 2013-04-02
    • 2013-04-25
    • 1970-01-01
    • 1970-01-01
    • 2012-09-06
    • 1970-01-01
    • 2012-04-24
    • 2015-11-08
    • 2011-11-07
    相关资源
    最近更新 更多