我的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函数中删除参数,则表示参数数量错误(2表示0)如果我添加参数部分,则表示选项未定义 :( 你能帮忙吗?
答案 0 :(得分:1)
您收到“未定义选项”错误的原因是您未在使用它的方法中定义options
。您的self.perform
方法希望收到两个不同的参数query
和label
,但方法中的代码需要有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']
)。你必须保持一致。