2013-06-11 5 views
1

내 resque 작업자 클래스는 다음과 같습니다인수를 전달하고 (resque-status) Resque :: JobWithStatus에있는 인수를 사용하는 방법?

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에서 매개 변수를 제거하면 :( 작동하지 않음 기능은 말했다 인수 잘못된 번호 (0 2) 그리고 난 다시 매개 변수 섹션을 추가하는 경우가 옵션가 :( 당신이 도움이 될 정의되지 말한다?

답변

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]). 방금 일관성있게해야합니다.

+0

감사합니다 ... 귀하의 솔루션은 100 % 작동하지 않았지만 옵션 해시 테이블의 생각을 가지고. resque-status가 내부적으로 약간의 변경을 가할 수 있습니다. 첫 번째 매개 변수에 작업 ID를 전송하고 두 번째 매개 변수에 다른 인수를 보냅니다. 그래서 내가 지금하고있는 것은 'def self.perform (jobid, options)'를 resque 함수로 사용하고 있습니다. –

관련 문제