당사의 Discourse 서버에서 이상한 문제가 발생했습니다. 수개월 동안 내부 POP3 서버에서 이메일 폴링이 문제없이 작동해 왔습니다. 2월 16일에 갑자기 이메일 수신 중단이 시작되었습니다. 이상하게도, POP3 서버의 로그 파일에서 Discourse의 활동이 보입니다:
Feb 25 13:54:49 mailout popa3d[12458]: Authentication passed for discourse
Feb 25 13:54:49 mailout popa3d[12458]: 1545 messages (12060237 bytes) loaded
Feb 25 13:54:49 mailout popa3d[12458]: 0 (0) deleted, 1545 (12060237) left
그러나 새 이메일이 처리되지 않습니다.
현재 최신 버전인 Discourse 2.7.0.beta4를 사용하고 있습니다(오늘부터 2.7.0.beta3을 사용 중입니다). 다음은 저희의 이메일 설정입니다:
이것만으로 Discourse의 폴링이 중단되지는 않아야 하지만, 수신된 이메일이 예외를 발생시킬 수 있습니다. 새로운 코드에는 오류 처리가 없습니다…
@jzedlitz 여전히 문제를 겪고 계신가요? 이 문제를 해결하는 데 도움을 주실 의향이 있으신가요? /logs에 관련 오류가 있나요? Jobs::PollMailbox를 검색할 때 /sidekiq/scheduler에서 오류를 확인하시나요? rails 콘솔에서 수동으로 폴링을 실행할 때 오류가 발생하나요?
./launcher enter app
rails c
Jobs::PollMailbox.new.execute({})
def mail_too_old?(mail_string)
mail = Mail.new(mail_string)
date_header = mail.header['Date']
return false if date_header.blank?
date = Time.parse(date_header.to_s)
date < 1.week.ago
end
그러니 아마 Time.parse가 실패하면 조용한 오류(silent error)가 발생할 수 있겠네요. Date 헤더가 없는 경우 아무 동작도 시도하지 않으니까요.
늦게 답변드려서 죄송합니다. Discourse의 POP3 메일함을 비우는 방식으로 문제를 거의 해결했습니다. 즉시 Discourse가 다시 메시지를 수신할 수 있게 되었습니다. 그 후 몇 개의 최신 이메일을 이제 비어 있는 POP3 메일함으로 옮겼고, 이 메시지도 정상적으로 처리되었습니다. 하지만 1,400개에 달하는 오래된 이메일 중 일부를 메일함에 넣자마자 Discourse가 더 이상 어떤 메시지도 처리하지 않습니다.
저도 방금 같은 문제를 발견했습니다. 이메일이 메시지를 생성해야 할 때 뭔가 이상하다는 것을 알게 되었습니다. POP3 메일함에 몇 개의 이메일이 남아 있었습니다(저는 작은 인스턴스를 운영하고 있습니다).
메시지를 하나씩 넣는 방식으로 처리하니 효과가 있었던 것 같습니다. 이제 더 잘 작동한다고 생각하지만, 이를 확인하려면 조금 더 기다려야 합니다.
네, 그렇게 짐작했어요. 그런데 mail_too_old?가 작동하지 못하게 한 이메일이 무엇인지 알면 흥미롭겠네요. 정말로 오래된 이메일이었을까요? 아니면 이메일을 파싱하는 데 실패한 걸까요? 아니면 다른 이유가 있었을까요? 원하신다면 POP3 작동을 막았던 이메일을 쪽지로 보내주세요.