除非另有说明,否则我希望所有入队调用都默认到某个队列,这样它是 DRY 且更易于维护。为了指定一个队列,文档说在类中定义一个变量@queue = X。所以,我尝试执行以下操作但没有用,有什么想法吗?
class ResqueJob
class << self; attr_accessor :queue end
@queue = :app
end
class ChildJob < ResqueJob
def self.perform
end
end
Resque.enqueue(ChildJob)
Resque::NoQueueError: Jobs must be placed onto a queue.
from /Library/Ruby/Gems/1.8/gems/resque-1.10.0/lib/resque/job.rb:44:in `create'
from /Library/Ruby/Gems/1.8/gems/resque-1.10.0/lib/resque.rb:206:in `enqueue'
from (irb):5
最佳答案
在ruby 中,类变量是不被继承的。这就是 Resque 找不到您的@queue 变量的原因。
您应该改为在父类中定义 self.queue
。 Resque 首先检查 @queue 是否存在,然后再查找 queue
类方法:
class ResqueJob
def self.queue; :app; end
end
class ChildJob < ResqueJob
def self.perform; ...; end
end
关于ruby-on-rails - 如何指定默认队列以用于 Rails 中 Resque 的所有作业?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5102113/