2011-10-05 8 views
2

작업 메일러 3.0.8과 함께 지연된 작업 버전 2.1.4를 사용하여 백그라운드에서 내 이메일을 보냅니다.지연된 작업 승객 생산 미정 방법 오류

UserMailer.delay.newsletter(email) 

은 개발 및 생산 레일 콘솔에 잘 나와 함께 작동합니다. 이 내 라이브 생산 승객 서버에서 호출 될 때

는하지만, 내가 문제

어떤 도움을 생각이 DJ가 실행될 때 DJ는하지만, 그것은

{undefined method `newsletter' for #<Class:0xc08afa0> 

을 던져 만들어?

답변

1

문제는 클래스 메소드 그래서

와 생산 모드에서 레일/승객과 함께, 내가 솔루션 주위에 작업을했다 ... 나는 예를 메소드를 호출하려고 클래스 전화를 피할 수 방법.

예제를 참조하십시오. 그럼 .. 나는 배경에서 다음 메소드를 호출 할 필요가

UserMailer.deliver_newsletter(email) 

가정, 나는 새로운 클래스가

class DelayClassMethod 
    def initialize(receiver_name, method_name, options={}) 
    @receiver_name = receiver_name 
    @method_name = method_name 
    @parameters = options[:params] || [] 
    end 

    def perform 
    eval(@receiver_name).send(@method_name, *@parameters) 
    end 
end 

을 DelayClassMethod 및

DelayClassMethod.new("UserMailer", "deliver_newsletter", :params=>[email]).delay 

에 의해 지금 백그라운드에서 방법을 실행할 수 있습니다 생성 따라서 인스턴스 메서드를 백그라운드에서 실행 중이므로 클래스 메서드가 실행됩니다.

또 다른 예 ..

내가

Product.list_all_by_user_and_category(user, category).delay 

은 다음 그것은 아니, 난 단 하나의 버전을 데

DelayClassMethod.new("Product", "list_all_by_user_and_category", :params => [user, category]).delay 
0

내 직감은 여러 버전의 제작 중 delayed_job을 사용하고 있다는 것입니다. 지연 작업 프로세스를 시작하기 위해 번들러를 사용하고 있습니까?

bundle install in production을 수행 할 때 나는 --binstubs 플래그를 사용하여 delayed_job 주위에 래퍼를 생성하고 해당 실행 파일을 사용하여 작업을 시작할 것을 권장합니다.

+0

실행할 수 있습니다 실행하려는 가정합니다. 나는 번들 exec rake 작업을 시도했다 : work하지만 여전히 같은 오류. –

관련 문제