能否向(resque-status) Resque::JobWithStatus传递参数?

3

我是一个对Resque不太熟悉的新手,但是它看起来非常适合我的需求。

实际上,我正在尝试设置一个简单的测试应用程序,例如:

require 'resque'
require 'resque/job_with_status'
class WordAnalyzer < Resque::JobWithStatus
  @queue = "word_analysis"

  def self.perform(word)
    puts "About to do heavy duty analysis on #{word}"
    sleep 3 # fake analysis here
    # this would be something impressive
    puts "Finished with analysis on #{word}"
  end
end

通过创建后台工作程序

WordAnalyzer.create(word)

没有使用resque-status时,它可以完美运行(使用enqueue而不是创建worker)。但是使用resque-status时,会出现以下错误:
“参数错误(2个参数而不是1个) /.../resque_test/lib/word_analyzer.rb:6:in `perform' /.../.rvm/gems/ruby-1.9.2-p136/gems/resque-1.16.1/lib/resque/job.rb:127:in `perform'”
我已经搜索了文档和代码,但没有找到正确处理resque-status作业参数的方法。这是否可能?
提前感谢您的帮助。

3
哦我的天啊,我在文档中误解了选项哈希表。它的工作方式类似于 WordAnalyzer.create(:word => word)然后在实例方法(而不是类方法)perform中访问 options['word'] 。 - udo
1个回答

8

你应该做什么

WordAnalyzer.create(:word => word)

通过 perform 方法访问该单词:

  def perform
    word = options['word']
    puts "About to do heavy duty analysis on #{word}"
    sleep 3 # fake analysis here
    # this would be something impressive
    puts "Finished with analysis on #{word}"
  end

我认为这是因为它是一个符号,而“word”是一个字符串。如果你想使用options[:word],也许你需要做WordAnalyzer.create(:word => word.to_sym)。不过我还没有尝试过! - Sadiksha Gautam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接