2017-05-11 4 views
0

지연된 작업으로 API 속도 제한을 처리하는 것에 대해 this guide을 수행하려고합니다.지연된 작업 오류 콜백이 실행되지 않는 이유는 무엇입니까?

여기에 내 일이다 : 여기

# app/jobs/mailer_job.rb 
class MailerJob < Struct.new(:custom_id) 

    def perform 
    # Intentionally throw an error to test error callback 
    raise StandardError 
    end 

    def error(job, exception) 
    puts 'Error!' 
    end 

end 

내가 설치 한 잠재적으로 관련 보석이다. Ruby 1.9.3을 사용하고 있습니다.

[Worker(host:ubuntu pid:9912)] Starting job worker 
[Worker(host:ubuntu pid:9912)] Job MailerJob (id=1720) RUNNING 
[Worker(host:ubuntu pid:9912)] Job MailerJob (id=1720) FAILED (0 prior attempts) with StandardError: StandardError 
[Worker(host:ubuntu pid:9912)] 1 jobs processed at 12.9574 j/s, 1 failed 

나는 오류 콜백이 발생 보지 못할 :

gem 'rails', '3.0.20' 
gem 'passenger', '5.0.21' 
gem 'delayed_job_active_record', '4.1.1' 
gem 'delayed_job', '4.1.2' 
gem 'foreman', '0.83.0' 

은 내가 지연된 작업 로그에 다음을 참조하십시오. 그러나 CTRL + C으로 레일 서버를 죽이면 즉시 오류 콜백 puts 문이 인쇄됩니다.

서버가 실행되는 동안 사용자 지정 지연된 작업의 오류 콜백이 실행되지 않는 이유는 무엇입니까?

+1

확실히 말할 수는 없지만 오류 콜백이 정상적으로 작동 할 가능성이 높습니다. 대부분의 OS의 표준 출력 (어떤 것을 말하지 않았는지)이 버퍼링됩니다. 그래서 나는 버퍼가 플러시되는 서버 종료 때까지 문자열이 버퍼링된다는 것을 확신합니다. STDERR.puts를 시도하십시오. 대부분의 OS에서 표준 오류는 버퍼링되지 않습니다. – Gene

+0

재미있는 생각! 우분투 16.04 LTS에서 실행됩니다. – ardavis

+0

'STDERR.puts'를 답변에 사용하는 것에 대한 의견을 올리시겠습니까? 그게 바로 그거야! 내가 예상했던 곳에서 나타납니다. – ardavis

답변

1

오류 콜백이 정상적으로 작동하는 것 같습니다. 대부분의 OS의 표준 출력은 버퍼링됩니다. 그래서 나는 버퍼가 플러시되는 서버 종료 때까지 문자열이 버퍼링된다는 것을 확신합니다.

시도 STDERR.puts. 대부분의 OS에서 표준 오류는 버퍼링되지 않습니다.

+0

정말 고마워요! – ardavis