지연된 작업으로 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
문이 인쇄됩니다.
서버가 실행되는 동안 사용자 지정 지연된 작업의 오류 콜백이 실행되지 않는 이유는 무엇입니까?
확실히 말할 수는 없지만 오류 콜백이 정상적으로 작동 할 가능성이 높습니다. 대부분의 OS의 표준 출력 (어떤 것을 말하지 않았는지)이 버퍼링됩니다. 그래서 나는 버퍼가 플러시되는 서버 종료 때까지 문자열이 버퍼링된다는 것을 확신합니다. STDERR.puts를 시도하십시오. 대부분의 OS에서 표준 오류는 버퍼링되지 않습니다. – Gene
재미있는 생각! 우분투 16.04 LTS에서 실행됩니다. – ardavis
'STDERR.puts'를 답변에 사용하는 것에 대한 의견을 올리시겠습니까? 그게 바로 그거야! 내가 예상했던 곳에서 나타납니다. – ardavis