1

我的resque工人阶级是:

require 'resque'
require 'resque/job_with_status'

class PatstatResqueWorker < Resque::JobWithStatus
  @queue = :my_worker_q
  def self.perform(query, label)
    puts "query:"
    puts options['query']
    puts "label:"
    puts options['label']
  end
end

我的控制器部分,我称之为 resque 的地方是......

class MyController < ApplicationController
  def resque
    job_id = PatstatResqueWorker.create(:query => @query, :label => "yes")
    status = Resque::Plugins::Status::Hash.get(job_id)
  end
end

它不起作用:(如果我从resque函数中删除参数,它会说参数数量错误(0代表2),如果我添加参数部分,它会说选项未定义:(你能帮忙吗?

4

1 回答 1

1

您收到“未定义选项”错误的原因是您尚未options在使用它的方法中定义。您的self.perform方法期望接收两个不同的参数querylabel,但方法内的代码期望有一个options散列。你必须选择其中之一。

要么这样做:

def self.perform(query, label)
  # use the parameters we've already defined
  puts "query:"
  puts query
  puts "label:"
  puts label
end

# call it like this
PatstatResqueWorker.create(@query, "yes")

或者这样做:

# change the method signature to match what you're doing
def self.perform(options)
  puts "query:"
  puts options['query']
  puts "label:"
  puts options['label']
end

# call it like this, with string keys
PatstatResqueWorker.create('query' => @query, 'label' => "yes")

请注意,对于散列版本,我将调用更改为使用字符串作为散列键而不是符号。如果需要,您可以使用符号,但您也必须在方法的主体中更改它(即options[:query],而不是options['query'])。你必须保持一致。

于 2013-06-11T13:39:39.433 回答