2012-04-05 3 views
0

Delayed_job (Rails 2.3.8 앱에서 집단적 아이디어 v2.0)을 사용하는 데 어려움을 겪고 있습니다.'nil object'오류가 발생한 레일에서 Delayed_job

나는 application_controller 방법에서 작업을 호출하고 있습니다 : 워드 프로세서 ID와 파일의 이름과 해시입니다

... 
Delayed::Job.enqueue(S3MoverJob.new(docs)) 

합니다.

class S3MoverJob < Struct.new(:docs) 

    def perform 
    #setup connection to Amazon 
    ... 
    #connect 
    ... 

    #loop to move files not transfered already 
    docs.each do |id,file_name| 
    # Move file 
     begin 
     doc = Document.find(id) 
     ... perform actions 
     rescue Exception => exc 
     raise "failed!" 
     end 
    end 
    end 

end 

문제는이 제기 점입니다 : S3MoverJob은 NoMethodError 실패했습니다 : 당신이 그것을 기대하지 않았다 때이 전무 개체가 내 lib 디렉토리 디렉토리에서

나는 클래스 S3MoverJob있다!

나는 DB에, 핸들러에보고하고,이 같은 ID와 파일 이름의 목록과 함께 수행하는 방법에 YAML 파일을 제공했다 :

docs: 
    3456: name_of_file_01.png 
    4567: name_of_file_02.txt 

나는 무엇을 놓치고? 도와 주셔서 감사합니다.

+1

이전에 묻는 질문에 대해 일부 답변을 수락으로 표시 할 수 있습니다. 그렇지 않으면 아무도 대답하지 않으려 고합니다. –

+0

stacktrace가 도움이 될 것입니다. – betamatt

+0

[Worker (호스트 : iMac pid : 1789)] NoMethodError로 S3MoverJob이 실패했습니다. 수행하지 않았을 때 nil 개체가 있습니다 (작업자 (호스트 : iMac pid : 1789) 기대하지 마라! ActiveRecord :: Base의 인스턴스를 예상했을 수 있습니다. [작업자 (호스트 : iMac pid : 1789)] 작업이 1 회 처리 된 68.9376j/s, 1 개가 실패했습니다.)] NoMethodError와 함께 S3MoverJob이 실패했습니다 : 기대하지 않았을 때 객체가 없습니다! ' – Valadares

답변

0

내 잘못입니다. 나는 그것이 idenpendent 프로세스 였고 몇 가지 요구 사항이 필요하다는 것을 몰랐다 :

require 'yaml' 
require 'uri' 
class Document < ActiveRecord::Base 
end 

그 후 모든 것이 정상적으로 작동한다.

아무튼 고마워요.

0

디버깅에 대한 자세한 정보를 제공해야한다고 생각합니다. 예 : 'Rails.logger.info'와 같은 문을 추가하여 수행 방법 아래에서 예외가 발생하는 곳을 확인하십시오.

+0

코드의 일부를 주석으로 처리하고 있는데 예외가 발생합니다 : docs.each do | id, file_name | 아마도, 내가 제대로 보낸 해시를 인식하지 못했을 것입니다. – Valadares