2011-10-07 3 views
2

저는 지난 1 일 반 동안 DelayedJob과 씨름하고 있습니다. 대형 문자열 및 ActiveRecord 개체를 받아들이는 간단한 작업 클래스를 만들려고합니다. 그러나 내가 그것을 쌓을 때 내가 욥에게 무엇을 건네 주더라도 그것은 헛된 것으로 취급됩니다. 이 작업을하기 위해 여러 가지 전략을 시도했습니다. 나는 ActiveRecord 객체의 ID (nil로 처리됨)를 전달하려고 시도했지만, Job 객체에 이니셜 라이저를 추가하려고 시도했다. (Struct의 인스턴스에서 상속받는 대신) ... 아무것도 작동하지 않는다.DelayedJob 작업 인스턴스는 전달 된 모든 객체를 nil로 처리합니다.

내가 말도 안되는 무언가로 내 작업 클래스를 단순화했습니다, 그리고 그것은 여전히 ​​작동하지 않습니다

def test_job 
    Delayed::Job.enqueue(SimpleJob.new(@owner.id)) 
    redirect_to :action => 'index', :controller => 'owner' 
end 

오류가 있음을 물론이다

class SimpleJob < Struct.new(:owner_id) 
    def perform 
    @owner = Owner.find(owner_id) 
    puts @owner.full_name 
    end 
end 

을 그리고 내 컨트롤러 id를 nil로 사용하여 소유자를 찾을 수 없습니다 (요청하기 전에 예, @owner가 인스턴스화되고 작동하며 before_filter가이를 보장합니다).

레일즈 2.3.5, 딜레이 조브 버전 2.0.7을 사용하고 있습니다. My Job 객체가 libs 폴더에 있으면 차이가 있습니다.

일부 구성이 누락 되었습니까?

+0

이, 3 행에 반면 기호 OWNER_ID입니다 (이 코드에서 OWNER_ID에 대한 참조 만있는 경우)이 아닌 코드의 아무 곳이나 언급은 일반 문자열. 그것은 이유 일 수 있습니다. @owner는 nil을 반환합니다. – rb512

+0

Noob 질문 -하지만 "class SimpleJob

답변

0

지연된 작업 호출이 올바르게 설정되었습니다. 첫 번째로 확인해야 할 것은 @ owner.id가 처음부터 nil이 아니기 때문에 더 이상 문제가되지 않는다는 것입니다.

0

DB를보고 delayed_jobs 테이블을보고 개체가 올바르게 serialize되었는지 확인하십시오 . 라인 1에

안녕

관련 문제