Возможно ли передавать аргументы в (resque-status) Resque::JobWithStatus?

#ruby #backgroundworker #resque

#ruby #backgroundworker #resque

Вопрос:

Я довольно новичок в 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 это работает отлично (с вызовом очереди вместо создания рабочего).
С resque-status я получаю

неправильное количество аргументов (2 вместо 1) /…/resque_test/lib/word_analyzer.rb:6: в `perform’ /…/.rvm/gems/ruby-1.9.2-p136/gems/resque-1.16.1/lib/resque/job.rb:127: в `perform’

Я искал как docu, так и code, но не нашел надлежащего способа передачи аргументов заданию со статусом resque. Возможно ли это?

Заранее спасибо.

Комментарии:

1. О боже… Я неверно истолковал хэш параметров в документации. Это работает как WordAnalyzer.create(:word => word), а затем выполняется доступ к options[‘word’] в методе экземпляра (не класса).

Ответ №1:

Вы должны сделать

 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
  

Комментарии:

1. Я думаю, потому что это символ, а ‘word’ — строка. Если вы хотите использовать options[:word] , возможно, вам придется сделать WordAnalyzer.create(:word => word.to_sym) . Хотя я еще не пробовал это!