요약 이메일이 모든 사용자에게 전송되지 않음 – 디버깅 도움 필요

@Canapin 이 설정이 이메일과 관련이 있다는 것을 가리키는 문서를 저희도 확인하지 못했습니다… 그래도 @Heliosurge, 위치를 알려주셔서 감사합니다.

또 하루 동안 다이제스트가 생성되지 않았습니다. 지난 24시간 동안 트리거를 유발하기 위해 새 주제를 게시했는데도 아무 반응이 없었습니다…

여러분들 중 다른 아이디어가 있는 분 계신가요? 어딘가에 로그를 놓치고 있는 건가요? 우리가 보고 수정할 수 있는 어딘가에서 문제가 발생하고 있는 건가요?

이 부분을 고려해 보면, 문제는 시스템 내 사용자 수와 관련이 있을 것으로 추정됩니다. 이상한 점은 디스코스에 출시된 이후로 이 숫자가 10개 이상 변하지 않았다는 것입니다.

현재 대략 다음과 같습니다:

  • 활성 사용자 100만 명
  • 비활성화된 사용자 240만 명

시스템이 이 조회를 수행할 때 어떤 이상한 타임아웃이 발생하는 것일까요? 실패할 경우 그 출력을 어디에서 확인할 수 있을까요?

다시 말하지만, 지난 1~2주 전까지는 다이제스트가 전송되고 있었으므로(적어도 일부는) 이것이 문제일 것 같지는 않아 보입니다.

그럴 수도 있고, 아니면 다이제스트가 비어 있어 사용자에게 발송되지 않는 다른 이유가 있을 수도 있습니다.

다이제스트가 어떻게 만들어지는지 정확히 알지 못합니다. 사용자가 무시하는 카테고리나 그런 요소들이 반영되는지도 모르겠습니다.

레일즈 콘솔을 통해 수동으로 다이제스트를 보내면 사용자들이 다이제스트를 받지 못할 것 같습니다.

user = User.find_by(username: 'user-name')
Jobs.enqueue(:user_email, type: :digest, user_id: user.id)

이 스크립트를 실행한 몇 초 후, Sidekiq의 처리된 작업 수가 1 증가하는 것을 볼 수 있을 것입니다. 하지만 포럼이 크다면 Sidekiq 작업이 항상 많이 존재하므로 증가 여부를 확인하기 어려울 수 있습니다.
실시간으로 확인하려면 Live Poll 버튼을 사용할 수 있습니다:

제 테스트 결과, 사용자에게 다이제스트를 보내는 레일즈 스크립트를 실행해도 다이제스트가 비어 있는 경우:

  • 사용자가 이전에 이미 수신한 경우
  • 또는 프로필에서 이메일 요약 기능을 비활성화한 경우
  • 등등

이러한 경우 Sidekiq의 처리된 작업 수는 1 증가하지만 이메일은 발송되지 않으며 /admin/email/sent에 새로운 항목도 표시되지 않습니다.

Sidekiq의 처리된 작업을 로그로 기록하여 단서를 찾아볼 수 있을지도 모릅니다. 잠시 검색해 봤지만 기본적으로 어떤 작업이 처리되었는지 로그에 기록되는지 확신이 서지 않습니다.

사용자들이 다이제스트를 받지 못하는 데에는 논리적이고 타당한 설명이 있을 것 같습니다. 작업은 처리되었을 수 있지만, 다이제스트가 비어 있어서 그 흔적이 남아있지 않을 수 있습니다.

관련된 사용자들의 설정, 알림 수준, 추적 중인 카테고리 등을 다시 한번 꼼꼼히 확인해 보시는 것이 좋겠습니다.

다이제스트 전송 메커니즘에 디버깅 출력을 추가하는 것은 꽤 쉬운 일입니다.
프로덕션 인스턴스에 영향을 주지 않고 테스트할 수 있는 스테이징 사이트가 있으신가요?

거기서 쿼리 타임아웃이 발생하는지 등을 테스트해 볼 수 있습니다. 단순히 생각하면, 타임아웃이 로그에 기록될 것으로 예상됩니다.

또한 대상人员进行 구성하는 쿼리에 통계 출력을 추가하여 기능을 향상시킬 수도 있습니다.

이 모든 작업은 샌드박스 환경에서는 어렵지 않지만, 프로덕션 환경에서는 위험할 수 있습니다.

사연은 계속되며, 다음과 같은 곳에서 해결될 수 있습니다: