如何传递参数并使用(resque-status)Resque :: JobWithStatus?

时间:2013-06-11 08:59:37

标签: ruby-on-rails ruby resque

我的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)如果我添加参数部分,则表示选项未定义 :( 你能帮忙吗?

1 个答案:

答案 0 :(得分: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'])。你必须保持一致。