Rails [已经解决] Rails2.3 与 resque 整合的问题

chucai · 2012年07月10日 · 最后由 chucai 回复于 2012年07月10日 · 2534 次阅读

如题,在调用

Resque.enqueue(PushMessageWorker, self.id, "activity", 'C')

总是提示

The error occurred while evaluating nil.[]
... ...
plugins/resque/lib/resque.rb:210:in `queue'

resque 的源码是

def queue(name)
   @queues[name.to_s]
 end

有朋友知道问题出在哪么?

补充 PushMessageWorker 的代码

class PushMessageWorker
  @queue = :push_message_que

  #活动的id号
  def self.perform(obj_id,type,action)
     #...  ...
  end

end

由两个问题引起:

  • redis-namespace 的版本太高,应该使用 1.0.3
  • 不需要安装 resque 的 plugin

没遇到过啊,PushMessageWorker 里面有没有@queue

#1 楼 @tumayun 有,等下,我将 PushMessageWorker 的代码贴出来。 你的也是 Rails2.3?

我的是 Rails2.3 但是没有遇到过这个问题,你可以研究下 resque 的源码

#3 楼 @tumayun 你是怎么安装 resque 的?有 blog 记录么?

安装就不是我安装的,公司的项目,其他同事安装的,然后我就用了,貌似听他说是会有问题,然后他重写了 resque 的 rake

# -*- encoding: utf-8 -*-

module ResqueJobs

  class ResqueJob
  end

  class SyncUser < ResqueJob
    @queue = :base

    def self.perform(user_id)
      puts "=================开始同步#{user_id}店铺信息=================="
        User.find(user_id).subusers_sync # 店铺子账户
        User.find(user_id).rates_sync # 店铺评价
        User.find(user_id).addresses_sync # 仓储地址
        User.find(user_id).chatpeers_sync # 旺旺接待
        User.find(user_id).wangwangs_sync # 记录旺旺统计
        User.find(user_id).members_sync # 卖家的会员
      puts "=================结束同步#{user_id}店铺信息=================="
    end
  end

end

我用 resque-scheduler,会有些不一样:

User.all.each do |user|
  Resque.set_schedule("base-#{user.user_id}", { cron: '0 9 * * *', queue: :base, class: 'ResqueJobs::SyncUser', args: user.id })
end

把出错的调用栈都帖出来看看呗 应该就是@queues没有取到

#7 楼 @azhao 是啊,就是这个问题。

#6 楼 @mimosa 谢谢你的回复。我的代码几乎跟你的一样。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号