Resque开始工作,但什么都不做

时间:2011-09-19 10:14:08

标签: ruby-on-rails ruby queue resque

我正在使用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

4 个答案:

答案 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;