ruby-on-rails - Resque 启 Action 业,但不执行任何操作

标签 ruby-on-rails ruby queue resque

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

相关文章:

ruby - 当任何 <td>..</td> 值已知时,是否可以找到 <td> .. </td> 文本?

ruby - 在 Ruby 中如何确定一个字母数字 ID 大于另一个?

scala - 对于O(1)中带有peek()的Bounded Queue,是否存在纯功能实现?

c++ - 如何将 std::queue<char> 复制到 std::string?

ruby-on-rails - Youtube网络摄像头小部件-抓取VideoID

ruby-on-rails - Ruby/Rails : Respond to json request, 从对象数组创建哈希数组,更改键的名称

mysql - 在 jruby 上安装 mysql 有很多错误

mysql - super 通用的数据库结构

python - 我注意到我不能将 PriorityQueue 用于对象?

ruby-on-rails - 哈希内的 Rails 循环