Отправка писем о приостановке не работает: undefined method 'topic', остальные письма отправляются корректно

3.1.0.beta3

При приостановке аккаунта пользователя письмо ему не отправляется, и в журнале фиксируется следующая ошибка. Все остальные письма доставляются корректно.

Исключение в задаче: неопределенный метод 'topic' для nil:NilClass

Трассировка стека

/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'

Окружение

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:

Привет @omarfilip,

У меня нет для вас решения, но я хотел подтвердить, что смог воспроизвести эту проблему на установке Discourse без множества плагинов.

Шаги для воспроизведения:

  1. Выберите пользователя в разделе /admin/users/list/active и вручную приостановите его аккаунт с помощью кнопки приостановки.

image

  1. Добавьте текст в поле «Сообщение по электронной почте».

  1. Нажмите кнопку приостановки и убедитесь, что пользователь теперь приостановлен.

image

Результат: Электронное письмо не отправляется, и в логах ошибок появляется исключение Job Exception.

Сообщение (3 сообщения)

Исключение Job: undefined method `topic' for nil:NilClass


Стек вызовов

/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,

Отправлялись ли когда-либо ваши письма об приостановке?

Письма, связанные с моими тестовыми приостановками, были отправлены 2023-04-09T10:10:00Z, без каких-либо дополнительных действий с моей стороны, однако новые приостановки по-прежнему не удаются с той же ошибкой.

1 лайк

Спасибо за отчёт и воспроизведение ошибки, @omarfilip и @southpaw :+1:

Кто-то уже назначен для расследования, и, надеюсь, скоро появятся ответы. :crossed_fingers: :slight_smile:

2 лайка

Та же проблема с новыми приостановками — они просто накапливаются в очереди сбоев.

Обратите внимание: это поручено внутренним сотрудникам, и мы надеемся приступить к исправлению в ближайшие несколько дней.

2 лайка

Это должно быть исправлено: :+1:

2 лайка

Спасибо. Это сразу очистило зависшие задачи в Sidekiq. :+1:

2 лайка