2011-09-20 2 views
1

내 이니셜이 있습니다 왜 내가 말하지 않더라도 delayed_job 작업을 다시 실행합니까?

Delayed::Job.const_set("MAX_ATTEMPTS", 1) 

는하지만, 내 작업이 여전히 다시 실행 겉으로는 완전히이 설정을 무시하고, 실패 후.

무슨 일이 벌어 질까요?

대한 추가 정보를 원하시면 여기

내가 관찰하고있는 무슨이다 : 채워진 "마지막 오류"필드 이상 (1)의 '시도'수의 작업 (10 +).

답변

3

이전/잘못된 위키를 읽고있는 것을 발견했습니다. 이를 설정하는 올바른 방법은

Delayed::Worker.max_attempts = 1 
1

작업이 실패한 후에도 여전히 남아있는 레코드 (작업)에 대해 dbms 테이블 "delayed_jobs"를 확인하십시오. 레코드가 아직 남아 있으면 작업이 다시 실행됩니다. - "시도"가 0이 아니라고 표시하면 상수 설정이 올바로 작동하지 않는다는 것을 알고 있습니다.

또 다른 추측은 어떤 이유로 작업의 "실패"가 DelayedJob에 걸리지 않는다는 것입니다. -이 경우 "시도"는 여전히 0이됩니다.

delayed_job/lib/delayed/job.rb 파일을 검사하여 디버그합니다. 당신의 작업 중 하나가 실패 할 때 self.workoff 메서드

@ 존, 나는 MAX_ATTEMPTS를 사용하지 않습니다. 디버깅하려면 보석이 어디에 사용되는지 확인하십시오. 문제는 문제는 작업을 시도하는 횟수를 1로 제한하는 것이 아니라 정상적인 방법으로 처리하는 것입니다. 디버거 또는 로깅 stmt를 사용하여 MAX_ATTEMPTS 설정이 제대로 작동하는지 확인하십시오.

DelayedJobs 작업 러너가 전체 레일 프로그램이 아니라는 것을 기억하십시오. 따라서 이니셜 라이저 설정이 실행되지 않았을 수 있습니다. 작업 주자를 실행하는 데 사용하는 스크립트를 조사하십시오.

+0

방금 ​​추가 한 정보 ... MAX_ATTEMPTS 설정에 대해 잘 알고 있으며 어떻게 동작 할 예정입니까? 이 파일에 대한 포인터를 보내 주셔서 감사합니다. –

+0

업데이트 된 답변보기. –

+0

FWIW, 이니셜 라이저에서 MAX_ATTEMPTS를 DJ docs/wiki에서 권장하는 방법대로 설정하십시오. –

관련 문제