我正在使用 resque 来做一些(长时间)工作。我有几个类具有相同的混合模块用于排队。类服务替代了测试,这就是它独立且(可能太复杂)的原因。所以故事是当我打电话时
Campaign.perform(user_id)
直接,一切正常,但是当我尝试使用队列时:
Resque.enqueue(Campaign, user_id)
工作已创建,但似乎什么也没做。至少,数据库中没有保存任何内容。这是Campaign类的主要任务。我可以在 resque-web-interface 中看到作业创建并完成,然后完成(速度很快,几乎在创建后),但没有结果。
我是 Resque 的新手,不太确定它调用了所有内容(困惑如何调试它)。
有人有类似的问题吗?感谢您的帮助。
模块:
module Synchronisable
def self.included(base)
base.extend ClassMethods
end
module ClassMethods
def perform(user_id)
save_objects("#{self.name}::Service".constantize.get_objects(user_id))
end
protected
def save_objects(objects)
raise ArgumentError "should be implemented"
end
end
class Service
def self.get_objects(user)
raise ArgumentError "should be implemented"
end
end
end
其中一类:
class Campaign < ActiveRecord::Base
include Synchronisable
@queue = :app
class << self
protected
def save_objects(objects)
#some stuff to save objects
end
end
class Service
def self.get_objects(user_id)
#some stuff to get objects
end
end
end
最佳答案
这是一个非常古老的问题,所以不确定当时的 Rails 文件夹结构如何,但我也遇到了同样的问题,并且问题与继承有关。似乎如果您使用 Resque,您的作业类不应继承自 ApplicationJob。
因此,如果您的代码在 (app/jobs/campaign_job.rb) 中是这样的:
class Campaign < ApplicationJob
@queue = :a_job_queue
def self.perform
#some background job
end
end
然后删除继承,即“< ApplicationJob”
关于ruby-on-rails - Resque 启 Action 业,但不执行任何操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7469332/