我正在使用resque做一些(长时间)工作。我有几个类使用相同的混合模块进行排队。 Class Service替代了测试,这就是它独立和(可能太多)复杂的原因。故事是我打电话的时候。
Campaign.perform(user_id)
直接,一切正常,但当我尝试使用队列时:
Resque.enqueue(Campaign, user_id)
创建了Job,但似乎什么都不做。至少,没有任何东西保存到数据库中。这是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
答案 0 :(得分:1)
由于异常,这些工作几乎肯定会失败。什么是resque-web显示在“失败”选项卡上?您也可以使用以下命令从Rails控制台获取此信息:
Resque.info
或
Resque::Failure.all(0)
答案 1 :(得分:1)
你应该这样管理你的工人:
nohup QUEUE=* rake resque:work & &> log/resque_worker_QUEUE.log
这会将您调试的所有内容输出到“log / resque_worker_QUEUE.log”,您将能够找出您的Campaign类有什么问题。
答案 2 :(得分:0)
试试这个:
env TERM_CHILD=1 COUNT=2 "QUEUE=*" bundle exec rake resque:workers
答案 3 :(得分:0)
这是一个非常古老的问题,所以不确定rails文件夹结构是如何回来的,但我遇到了同样的问题,问题在于继承。似乎您正在使用Resque,您的工作类不应该从ApplicationJob继承。
所以如果您的代码在(app / jobs / campaign_job.rb)中是这样的:
class Campaign < ApplicationJob
@queue = :a_job_queue
def self.perform
#some background job
end
end
然后删除继承,即&#34;&lt; ApplicationJob&#34;