정지 이메일은 'undefined method 'topic'' 오류로 실패, 다른 이메일은 정상 작동

3.1.0.beta3

사용자가 정지(suspended)되면 해당 사용자에게 이메일이 전송되지 않으며, 아래 오류가 기록됩니다. 다른 모든 이메일은 정상적으로 전달됩니다.

Job exception: undefined method 'topic' for nil:NilClass

백트레이스(Backtrace)

/var/www/discourse/app/jobs/regular/user_email.rb:116:in `message_for_email' 
/var/www/discourse/app/jobs/regular/user_email.rb:76:in `send_user_email' 
/var/www/discourse/app/jobs/regular/user_email.rb:39:in `execute' 
/var/www/discourse/plugins/chat/lib/chat/user_email_extension.rb:6:in `execute' 
/var/www/discourse/app/jobs/regular/critical_user_email.rb:12:in `execute' 
/var/www/discourse/app/jobs/base.rb:249:in `block (2 levels) in perform' 
rails_multisite-4.0.1/lib/rails_multisite/connection_management.rb:80:in `with_connection'
/var/www/discourse/app/jobs/base.rb:236:in `block in perform' 
/var/www/discourse/app/jobs/base.rb:232:in `each' 
/var/www/discourse/app/jobs/base.rb:232:in `perform' 
sidekiq-6.5.8/lib/sidekiq/processor.rb:202:in `execute_job' 
sidekiq-6.5.8/lib/sidekiq/processor.rb:170:in `block (2 levels) in process' 
sidekiq-6.5.8/lib/sidekiq/middleware/chain.rb:177:in `block in invoke' 
/var/www/discourse/lib/sidekiq/pausable.rb:134:in `call' 
sidekiq-6.5.8/lib/sidekiq/middleware/chain.rb:179:in `block in invoke' 
sidekiq-6.5.8/lib/sidekiq/middleware/chain.rb:182:in `invoke' 
sidekiq-6.5.8/lib/sidekiq/processor.rb:169:in `block in process' 
sidekiq-6.5.8/lib/sidekiq/processor.rb:136:in `block (6 levels) in dispatch' 
sidekiq-6.5.8/lib/sidekiq/job_retry.rb:113:in `local' 
sidekiq-6.5.8/lib/sidekiq/processor.rb:135:in `block (5 levels) in dispatch' 
sidekiq-6.5.8/lib/sidekiq.rb:44:in `block in <module:Sidekiq>' 
sidekiq-6.5.8/lib/sidekiq/processor.rb:131:in `block (4 levels) in dispatch' 
sidekiq-6.5.8/lib/sidekiq/processor.rb:263:in `stats' 
sidekiq-6.5.8/lib/sidekiq/processor.rb:126:in `block (3 levels) in dispatch' 
sidekiq-6.5.8/lib/sidekiq/job_logger.rb:13:in `call' 
sidekiq-6.5.8/lib/sidekiq/processor.rb:125:in `block (2 levels) in dispatch' 
sidekiq-6.5.8/lib/sidekiq/job_retry.rb:80:in `global' 
sidekiq-6.5.8/lib/sidekiq/processor.rb:124:in `block in dispatch' 
sidekiq-6.5.8/lib/sidekiq/job_logger.rb:39:in `prepare' 
sidekiq-6.5.8/lib/sidekiq/processor.rb:123:in `dispatch' 
sidekiq-6.5.8/lib/sidekiq/processor.rb:168:in `process' 
sidekiq-6.5.8/lib/sidekiq/processor.rb:78:in `process_one' 
sidekiq-6.5.8/lib/sidekiq/processor.rb:68:in `run' 
sidekiq-6.5.8/lib/sidekiq/component.rb:8:in `watchdog' 
sidekiq-6.5.8/lib/sidekiq/component.rb:17:in `block in safe_thread'

환경(Env)

hostname gaoa-discourse-app
process_id 11140
application_version ea4f7fb660cb4cb5cba3763e9a28352123d39591
current_db default
current_hostname forum.[xxx].com
job Jobs::CriticalUserEmail
problem_db default
time 8:54 am
opts type account_suspended
--- --- --- ---
--- ---
user_id 3919
user_history_id 41800
current_site_id default

수정하여 sidekiq 상태를 추가합니다:

Hi @omarfilip,

해결책을 드리기 어렵지만, 플러그인이 거의 설치되지 않은 Discourse 설치 환경에서 이 문제를 재현할 수 있음을 확인하고 싶었습니다.

재현을 위해 수행한 단계:

  1. /admin/users/list/active에서 사용자를 선택하고 suspend 버튼을 사용하여 수동으로 정지합니다.

image

  1. “Email message” 필드에 텍스트를 입력합니다.

  1. suspend 버튼을 클릭하고 사용자가 이제 정지되었는지 확인합니다.

image

결과: 이메일이 전송되지 않으며, 오류 로그에 Job Exception이 발생합니다.

Message (3 copies reported)

Job exception: undefined method `topic' for nil:NilClass


Backtrace

/var/www/discourse/app/jobs/regular/user_email.rb:116:in `message_for_email'
/var/www/discourse/app/jobs/regular/user_email.rb:76:in `send_user_email'
/var/www/discourse/app/jobs/regular/user_email.rb:39:in `execute'
/var/www/discourse/plugins/chat/lib/chat/user_email_extension.rb:6:in `execute'
/var/www/discourse/app/jobs/regular/critical_user_email.rb:12:in `execute'
/var/www/discourse/app/jobs/base.rb:249:in `block (2 levels) in perform'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rails_multisite-4.0.1/lib/rails_multisite/connection_management.rb:80:in `with_connection'
/var/www/discourse/app/jobs/base.rb:236:in `block in perform'
/var/www/discourse/app/jobs/base.rb:232:in `each'
/var/www/discourse/app/jobs/base.rb:232:in `perform'
5개의 좋아요

@omarfilip 님, 안녕하세요.

정지 관련 이메일이 실제로 전송된 적이 있나요?

테스트용 정지와 관련된 이메일은 [date=2023-04-09 time=06:10:00 timezone=“America/New_York”]에 전송되었지만, 이후 제가 추가로 조치한 것은 없었습니다. 그러나 새로운 정지 요청은 여전히 동일한 오류로 실패하고 있습니다.

1개의 좋아요

보고와 재현 방법을 공유해 주셔서 감사합니다, @omarfilip, @southpaw :+1:

담당자가 배정되어 조만간 해결책을 찾을 수 있기를 바랍니다. :crossed_fingers: :slight_smile:

2개의 좋아요

새로운 정지 처리에서도 동일한 문제가 발생하고 있습니다. 단순히 실패 대기열에 쌓여만 있죠.

참고로, 이는 내부적으로 배정된 작업이며, 향후 며칠 내에 수정을 진행할 예정입니다.

2개의 좋아요

다음과 같이 수정되어야 합니다: :+1:

2개의 좋아요

고맙습니다. sidekiq에 막혀 있던 작업들이 바로 해결되었습니다. :+1:

2개의 좋아요