2013-09-05 3 views
4

현재 백그라운드 대기열에 많은 행운이 없습니다. Resque를 작동 시키려고합니다. 나는 redis와 Resque gem을 설치했습니다.클래스에 대해 Resque - 정의되지 않은 메서드 'perform'

Redis가 실행 중입니다. 작업자가 실행 중입니다 (rake resque : work QUEUE = simple). 웹 인터페이스를 사용하면 작업자가 실행 중이고 작업 대기 중임을 알 수 있습니다.

'rake get_updates'를 실행하면 작업이 대기 중이지만 실패합니다. 나는 def self.perform과 def로 그것을 시도했다.

clockwork.rake

task :get_updates => :environment do 
    Resque.enqueue(GetUpdates) 
end 

클래스 파일 (응용 프로그램/노동자/get_updates.rb)

class GetUpdates 
    @queue = :simple 

    def perform 

     puts "Running GetUpdates" 

    end 

end 

오류 메시지

undefined method `perform' for GetUpdates:Class 
/Users/lukesmith/.rvm/gems/ruby-1.9.3-p327/bundler/gems/resque-620d354454b8/lib/resque/job_performer.rb:79:in `perform_job' 
/Users/lukesmith/.rvm/gems/ruby-1.9.3-p327/bundler/gems/resque-620d354454b8/lib/resque/job_performer.rb:46:in `execute_job' 
/Users/lukesmith/.rvm/gems/ruby-1.9.3-p327/bundler/gems/resque-620d354454b8/lib/resque/job_performer.rb:25:in `perform' 

답변

8

perform 메소드는 클래스 인스턴스 메소드 여야합니다.

class GetUpdates 
    @queue = :simple 

    def self.perform 
    puts "Running GetUpdates" 
    end 

end 
+0

여기에서 방해해서 죄송합니다. OP가 자기가 시도한 것을 언급했다고 생각합니다. –

+0

나는 오프 순간이 있었을 것입니다. 나는 redis를 재시작하고 resque를 self.perform으로 변경 한 후 다시 시작했다. 그 일은 내가 원하는 것을하고 있지 않지만 더 이상 오류가 없다. 건배. –

+0

문제가 해결되었습니다. Tulentsev가 제안했듯이, 클래스 인스턴스 메소드 여야합니다. 다른 사용자에게 도움이 될 수 있도록 적절한 답변을 수락하십시오. –

1

메서드를 self.perform으로 변경 한 후 resque를 다시 시작해 보았습니다. rake resque를 종료하고 메소드 이름을 self.perform으로 변경 한 후 다시 시작하십시오. 이것은 확실히 작동합니다.