#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)
. Хотя я еще не пробовал это!