다이제스트 이메일 전송 시 무한 루프 발생

안녕하세요 여러분.

저희 Discourse 서버가 무한 루프에 빠져 이메일을 멈추지 않고 계속 보내고 있습니다. shared/standalone/log/rails/production.log 출력 내용은 다음과 같습니다:

Delivered mail 7db8eecd-c36a-419c-ae34-0561b08bae25@community.xx.cc (1322.2ms)
  Rendered user_notifications/digest.text.erb (Duration: 50.1ms | Allocations: 12577)
  Rendering user_notifications/digest.html.erb within layouts/email_template
  Rendered user_notifications/digest.html.erb within layouts/email_template (Duration: 139.5ms | Allocations: 26910)
  Rendering user_notifications/digest.text.erb
  Rendered user_notifications/digest.text.erb (Duration: 71.7ms | Allocations: 13505)
Delivered mail 5bbf2e54-96a8-437d-a032-69f98a00f22a@community.xx.cc (1485.2ms)
  Rendering user_notifications/digest.html.erb within layouts/email_template
  Rendered user_notifications/digest.html.erb within layouts/email_template (Duration: 70.9ms | Allocations: 20613)
  Rendering user_notifications/digest.text.erb
  Rendered user_notifications/digest.text.erb (Duration: 38.2ms | Allocations: 11390)

이 문제는 갑자기 발생하기 시작했습니다(아마도 다이제스트 크론이 시작될 때일 것입니다:

)

현재 1개의 코어가 다이제스트 이메일 전송으로 완전히 바쁘게 작동하고 있습니다.

  • 앱을 다시 빌드해도 해결되지 않습니다;

  • 최신 버전으로 업데이트했지만 변화가 없습니다;

  • “모든 사용자에게 요약 이메일 비활성화” 옵션을 켜고 앱을 다시 빌드했지만 변화가 없습니다;

    #### 설치된 버전
    
    ### 2.4.0.beta5
    

그 외 다른 해결책이 있을까요? 이 문제를 어떻게 멈출 수 있을까요?
미리 감사드립니다.

1개의 좋아요

틀린 말일 수도 있지만, 제 생각에는 요약 이메일이 대기열에 쌓였고 이제 그걸 전달하고 있는 것 같습니다. 전달이 완료될 때까지 계속 진행될 것입니다.

제 추측이 맞다면, 이메일을 비활성화한 후 해당 이메일이 저장된 테이블을 찾아 삭제하면 됩니다. 하지만 다음에 요약 이메일이 발송될 때 같은 일이 다시 일어날 것입니다.

1개의 좋아요

네, 그런데 이 문제가 이미 3일째 발생하고 있습니다. 다른 모든 이메일(예: 가입 관련 이메일)도 더 이상 전달되지 않습니다. 커뮤니티 기능은 정상적으로 작동하지만, 모든 이메일 전송은 작동하지 않습니다.

매우 유사한 문제를 발견했습니다 - Extreme memory usage due to bad mail credentials. 따라서 이것이 어떤 종류의 까다로운 버그인 것으로 보입니다.

이 문제를 멈추기 위해 제가 찾은 유일한 방법은 SMTP 제공업체의 인증 토큰을 제거하는 것이었습니다. Discourse가 수백 개의 오류를 표시하기 시작했고, 그 후에야 부하가 감소했습니다. 이후 토큰을 복원했고, 지금은 모든 것이 정상인 것 같습니다.

1개의 좋아요

이메일 인증 정보가 잘못되었나요?

@codinghorror 문제의 근본 원인을 찾았습니다. 우리 메일 제공업체가 (그들의 어리석은 이유로) 우리 계정의 인증된 호스트 레코드를 삭제했습니다. 이 호스트 레코드는 이메일의 from 필드에 우리 호스트를 제공하기 위해 사용되었습니다. 그래서 그들이 그렇게 한 후, Discourse가 무한 루프에 빠졌습니다. 해당 경우를 위해 Discourse 플로우에도 버그가 있다고 생각합니다. 에러를 보고하고 1코어가 100% 로딩되지 않도록 해야 하기 때문입니다.

즉, 계정은 정확합니다. 하지만 메일 제공업체가 메일 전송 시 “잘못된 전송 호스트” 또는 이와 유사한 오류를 반환하고, 이 플로우가 문제를 일으키고 있습니다.

2개의 좋아요

동의합니다. 이런 상태는 좋지 않으니 더 잘 처리해야 합니다.

1개의 좋아요

모든 것이 정상으로 돌아왔나요?

네. 메일 인증 정보를 변경한 후입니다.

1개의 좋아요