自上次更新(3.4.0.beta4-dev)以来,电子邮件严重问题

通过对已查看的新主题和对这些主题的电子邮件回复的小样本进行观察,看起来很有希望,到目前为止,电子邮件计数大多是正确的。这是我所做的,不知道这是否解决了问题,但到目前为止似乎有所改善,现在:

我已升级到 3.5.0.beta1-dev,将 DNS 名称服务器强制设置为 8.8.8.8(从 1.1.1.1),然后重新启动。

我注意到这个:
docker image list --all

REPOSITORY TAG IMAGE ID CREATED SIZE
local_discourse/app latest 32adad867562 6 hours ago 3.68GB
none none 5306688e5dcb 9 days ago 2.74GB

但随着时间的推移,在没有我做任何事情的情况下,它变成了:

REPOSITORY TAG IMAGE ID CREATED SIZE
local_discourse/app latest 32adad867562 26 hours ago 3.68GB
discourse/base 2.0.20250129-0720 5306688e5dcb 10 days ago 2.74GB

所以,我不确定那个“none”是怎么回事。

我会密切关注这一点,并在评估更多数据后汇报。

我看到一些 redis 连接错误和 nginx / postgres 错误,我也会调查:

nginx:

2606 upstream prematurely closed connection while reading response header from upstream

redis:

Error fetching job: Error connecting to Redis on localhost:6379 (Errno::ECONNREFUSED)
heartbeat: Error connecting to Redis on localhost:6379 (Errno::ECONNREFUSED)
Error connecting to Redis on localhost:6379 (Errno::ECONNREFUSED) subscribe failed, reconnecting in 1 second. Call stack /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-4.8.1/lib/redis/client.rb:398:in `rescue in establish_connection'
Error fetching job: Error connecting to Redis on localhost:6379 (Errno::ECONNREFUSED)

postgres:

current:2025-02-08 04:24:06.133 UTC [75838] discourse@discourse ERROR:  duplicate key value violates unique constraint "index_post_reply_keys_on_user_id_and_post_id"
current:2025-02-08 04:24:20.624 UTC [75838] discourse@discourse ERROR:  duplicate key value violates unique constraint "index_post_reply_keys_on_user_id_and_post_id"
current:2025-02-08 08:05:19.485 UTC [91041] discourse@discourse LOG:  duration: 2345.289 ms  statement: COPY public.scheduler_stats (id, name, hostname, pid, duration_ms, live_slots_start, live_slots_finish, started_at, success, error) TO stdout;

/log - Job exception: execution expired:
查看这个:SMTP Net::ReadTimeout without relation to net or login problems - SMTP host is just slow - #2 by Falco

Message (3 copies reported)

Job exception: execution expired

Backtrace

/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.0/lib/net/smtp.rb:663:in `initialize'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.0/lib/net/smtp.rb:663:in `open'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.0/lib/net/smtp.rb:663:in `tcp_socket'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.0/lib/net/smtp.rb:672:in `block in do_start'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/timeout-0.4.3/lib/timeout.rb:185:in `block in timeout'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/timeout-0.4.3/lib/timeout.rb:192:in `timeout'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.0/lib/net/smtp.rb:671:in `do_start'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.0/lib/net/smtp.rb:642:in `start'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mail-2.8.1/lib/mail/network/delivery_methods/smtp.rb:109:in `start_smtp_session'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mail-2.8.1/lib/mail/network/delivery_methods/smtp.rb:100:in `deliver!'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mail-2.8.1/lib/mail/message.rb:269:in `deliver!'
/usr/local/lib/ruby/3.3.0/delegate.rb:87:in `method_missing'
/var/www/discourse/lib/email/sender.rb:296:in `send'
/var/www/discourse/app/jobs/regular/user_email.rb:79:in `send_user_email'
/var/www/discourse/app/jobs/regular/user_email.rb:39:in `execute'
/var/www/discourse/app/jobs/base.rb:316:in `block (2 levels) in perform'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-6.1.0/lib/rails_multisite/connection_management/null_instance.rb:49:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-6.1.0/lib/rails_multisite/connection_management.rb:21:in `with_connection'
/var/www/discourse/app/jobs/base.rb:303:in `block in perform'
/var/www/discourse/app/jobs/base.rb:299:in `each'
/var/www/discourse/app/jobs/base.rb:299:in `perform'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:202:in `execute_job'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:170:in `block (2 levels) in process'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/middleware/chain.rb:177:in `block in invoke'
/var/www/discourse/lib/sidekiq/pausable.rb:132:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/middleware/chain.rb:179:in `block in invoke'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/middleware/chain.rb:182:in `invoke'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:169:in `block in process'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:136:in `block (6 levels) in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/job_retry.rb:113:in `local'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:135:in `block (5 levels) in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq.rb:44:in `block in <module:Sidekiq>'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:131:in `block (4 levels) in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:263:in `stats'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:126:in `block (3 levels) in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/job_logger.rb:13:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:125:in `block (2 levels) in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/job_retry.rb:80:in `global'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:124:in `block in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/job_logger.rb:39:in `prepare'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:123:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:168:in `process'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:78:in `process_one'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:68:in `run'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/component.rb:8:in `watchdog'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/component.rb:17:in `block in safe_thread'

已确认:自升级到 3.5.0.beta1-dev、强制将 DNS 名称服务器设置为 8.8.8.8(从 1.1.1.1)并重启以来,严重的电子邮件问题似乎已得到解决。

我还将 SMTP open_timeout 延长至 15,但这可能不是必需的,但我无意将其恢复到默认值 5。

4 个赞

很高兴听到问题已解决,DNS 配置是系统管理员世界中 78% 问题的根源。

3 个赞

我在过去的 4 天里开始遇到一些关于电子邮件发送的新问题。不确定是否应该继续这个话题或开始一个新的,但目前我会继续这个话题。

我最近在这个问题发生的时间点,从命令行进行了一次完整的网站更新。

  • 没有用户收到任何关于网站活动的通知邮件。
  • SMTP 发送似乎正常,邮件投递测试立即成功。
  • Sidekiq 显示有数千个排队的任务,定期重试但一直失败。(有超过 7000 个任务被排队)
  • 日志中显示一个非常显著且频繁的错误:Job 异常:UserDestroyer::PostsExistError — 我在 Meta 上查询过,但自从至少 2017 年最后一篇提到此问题的帖子以来,没有其他人遇到类似问题。(过去 4 天内有超过 9000 个错误)

[详细的完整堆栈追踪]

/var/www/discourse/app/services/user_destroyer.rb:18:在 `destroy`
/var/www/discourse/app/jobs/onceoff/fix_primary_emails_for_staged_users.rb:23:在 `block (2 levels) in execute_onceoff`
activerecord-7.2.2.1/lib/active_record/relation/delegation.rb:98:在 `each`
activerecord-7.2.2.1/lib/active_record/relation/delegation.rb:98:在 `each`
/var/www/discourse/app/jobs/onceoff/fix_primary_emails_for_staged_users.rb:21:在 `block in execute_onceoff`
/var/www/discourse/app/jobs/onceoff/fix_primary_emails_for_staged_users.rb:14:在 `each_key`
/var/www/discourse/app/jobs/onceoff/fix_primary_emails_for_staged_users.rb:14:在 `execute_onceoff`
/var/www/discourse/app/jobs/onceoff/onceoff.rb:35:在 `execute`
/var/www/discourse/app/jobs/base.rb:316:在 `block (2 levels) in perform`
rails_multisite-6.1.0/lib/rails_multisite/connection_management/null_instance.rb:49:在 `with_connection`
rails_multisite-6.1.0/lib/rails_multisite/connection_management.rb:21:在 `with_connection`
/var/www/discourse/app/jobs/base.rb:303:在 `block in perform`
/var/www/discourse/app/jobs/base.rb:299:在 `each`
/var/www/discourse/app/jobs/base.rb:299:在 `perform`
sidekiq-6.5.12/lib/sidekiq/processor.rb:202:在 `execute_job`
sidekiq-6.5.12/lib/sidekiq/processor.rb:170:在 `block (2 levels) in process`
sidekiq-6.5.12/lib/sidekiq/middleware/chain.rb:177:在 `block in invoke`
/var/www/discourse/lib/sidekiq/pausable.rb:132:在 `call`
sidekiq-6.5.12/lib/sidekiq/middleware/chain.rb:179:在 `block in invoke`
sidekiq-6.5.12/lib/sidekiq/middleware/chain.rb:182:在 `invoke`
sidekiq-6.5.12/lib/sidekiq/processor.rb:169:在 `block in process`
sidekiq-6.5.12/lib/sidekiq/processor.rb:136:在 `block (6 levels) in dispatch`
sidekiq-6.5.12/lib/sidekiq/job_retry.rb:113:在 `local`
sidekiq-6.5.12/lib/sidekiq/processor.rb:135:在 `block (5 levels) in dispatch`
sidekiq-6.5.12/lib/sidekiq.rb:44:在 `block in module:Sidekiq`
sidekiq-6.5.12/lib/sidekiq/processor.rb:131:在 `block (4 levels) in dispatch`
sidekiq-6.5.12/lib/sidekiq/processor.rb:263:在 `stats`
sidekiq-6.5.12/lib/sidekiq/processor.rb:126:在 `block (3 levels) in dispatch`
sidekiq-6.5.12/lib/sidekiq/job_logger.rb:13:在 `call`
sidekiq-6.5.12/lib/sidekiq/processor.rb:125:在 `block (2 levels) in dispatch`
sidekiq-6.5.12/lib/sidekiq/job_retry.rb:80:在 `global`
sidekiq-6.5.12/lib/sidekiq/processor.rb:124:在 `block in dispatch`
sidekiq-6.5.12/lib/sidekiq/job_logger.rb:39:在 `prepare`
sidekiq-6.5.12/lib/sidekiq/processor.rb:123:在 `dispatch`
sidekiq-6.5.12/lib/sidekiq/processor.rb:168:在 `process`
sidekiq-6.5.12/lib/sidekiq/processor.rb:78:在 `process_one`
sidekiq-6.5.12/lib/sidekiq/processor.rb:68:在 `run`
sidekiq-6.5.12/lib/sidekiq/component.rb:8:在 `watchdog`
sidekiq-6.5.12/lib/sidekiq/component.rb:17:在 `block in safe_thread`

[/详情]

有人能提出下一步的调试和处理建议吗?

好的,只是想更新一下——我能想到的唯一进一步的操作是 git pull; ./launcher rebuild app,我刚刚做了这个操作,似乎解决了问题,现在邮件正在发送,Sidekiq 未处理的邮件任务堆积也开始减少。

在最近几天审查 discourse/discourse 的提交记录时,我不确定是什么解决了问题。但如果有人想要进一步调查,我很乐意提供更多信息。

5 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.