Sidekiq显示激活邮件被发送到邮箱地址为空(nil)

嘿,各位朋友,

有个有趣的问题想请教大家。事情是这样的:

  1. 使用 discourse/docs/INSTALL-cloud.md at main · discourse/discourse · GitHub 安装了 discourse
  2. 使用 doctor 测试了邮件,工作正常,收到了邮件。
  3. 尝试激活管理员账户,sidekiq 显示了这个(已隐藏 token):
    {“type”=>“signup”, “user_id”=>1, “email_token”=>“REDACTED”, “to_address”=>nil, “current_site_id”=>“default”}

不确定为什么 to_address 会是 nil

非常欢迎任何提示、建议或意见!

我大概能找到,但你知道触发邮件的 Sidekiq 作业叫什么名字吗?

如果你因为没有收到激活邮件而无法访问网站,你可以使用 rake admin:create 创建一个管理员用户和密码。完整说明请参见:https://meta.discourse.org/t/create-an-admin-account-from-the-console/17274。这样你应该就能登录网站了。

不过,听起来你仍然需要解决邮件发送问题。

6 个赞

抱歉回复延迟。触发它的作业是:Jobs::CriticalUserEmail

所以我严格按照指南操作。在注册管理员帐户时,没有发送电子邮件,并且 Jobs::CriticalUserEmail 包含 {“type”=>“signup”, “user_id”=>1, “email_token”=>“REDACTED”, “to_address”=>nil, “current_site_id”=>“default”}。

我确实强制创建了管理员帐户,以便查看存在哪些问题。结果如下:

  • Doctor 可以正常工作并收到电子邮件
  • Digest 测试可以正常工作并收到 HTML 和纯文本格式的电子邮件
  • 任何注册都没有发送电子邮件,并且管理员部分中的电子邮件日志甚至没有显示已发送电子邮件的消息。

每当用户尝试注册时,结果都相同:
Jobs::CriticalUserEmail 包含 {“type”=>“signup”, “user_id”=>2, “email_token”=>“REDACTED”, “to_address”=>nil, “current_site_id”=>“default”}。

/var/discourse/shared/standalone/log/rails/production.log 的末尾显示(已编辑):

Processing by UsersController#check_username as JSON
  Parameters: {"username"=>"bobo", "email"=>"REDACTED"}
Completed 200 OK in 2ms (Views: 0.1ms | ActiveRecord: 0.0ms | Allocations: 636)
Started GET "/session/csrf" for REDACTEDPUBLICIP at 2024-09-26 08:13:03 +0000
Processing by SessionController#csrf as JSON
Completed 200 OK in 1ms (Views: 0.1ms | ActiveRecord: 0.0ms | Allocations: 270)
Started POST "/u" for REDACTEDPUBLICIP at 2024-09-26 08:13:03 +0000
Processing by UsersController#create as */*
  Parameters: {"name"=>"JJ", "email"=>"REDACTED", "password"=>"[FILTERED]", "username"=>"bobo", "password_confirmation"=>"[FILTERED]", "challenge"=>"REDACTED", "timezone"=>"Europe/London"}
Completed 200 OK in 335ms (Views: 0.1ms | ActiveRecord: 0.0ms | Allocations: 23323)
Started POST "/login" for REDACTEDPUBLICIP at 2024-09-26 08:13:04 +0000
Processing by StaticController#enter as HTML
  Parameters: {"username"=>"bobo", "password"=>"[FILTERED]", "redirect"=>"/u/account-created"}
Redirected to https://REDACTEDDOMAIN/u/account-created
Completed 302 Found in 1ms (ActiveRecord: 0.0ms | Allocations: 507)
Started GET "/u/account-created" for REDACTEDPUBLICIP at 2024-09-26 08:13:04 +0000
Processing by UsersController#account_created as HTML
  Rendered layout layouts/application.html.erb (Duration: 14.0ms | Allocations: 4624)
Completed 200 OK in 21ms (Views: 15.1ms | ActiveRecord: 0.0ms | Allocations: 6821)
Started GET "/sidekiq/queues/critical" for REDACTEDPUBLICIP at 2024-09-26 08:13:15 +0000

日志中显示了注册参数的准确电子邮件,但 sidekiq 仍然报告“to_address”=>nil

1 个赞

您的网站的错误日志页面(位于 /logs)上是否有任何错误?您可以从管理侧边栏点击“安全/错误日志”条目进入该页面。

1 个赞

哦,有意思。我看到了这个:

1 个赞

您是否可以在 /sidekiq 访问 Sidekiq Web 界面?如果可以,该页面是否报告了任何错误?

1 个赞

但是,我得到的是:

尝试点击“Enqueued”选项卡。它是一个链接。

1 个赞

我收到这个:

这就是我发现 address_to=nil 的地方。

Redis 和/或 Sidekiq 似乎有问题。论坛上还有几位成员可能对如何调试此问题有所想法。

此时,我很想 SSH 登录到服务器并运行:

cd /var/discourse
./launcher rebuild app

此时这样做不会有坏处。

1 个赞

是的,我已经这样做了好几次,所以我才来问。

我进行过重建。我甚至进行过全新的安装。

似乎每次安装都会发生这种情况。无论如何。我现在真是束手无策了。

我非常感谢您为我提供的帮助。

1 个赞

这很令人惊讶。请确保您遵循此处概述的所有步骤:. https://github.com/discourse/discourse/blob/main/docs/INSTALL-cloud.md。

另外,请确保您安装 Discourse 的服务器满足此处概述的要求:https://github.com/discourse/discourse/blob/main/docs/INSTALL.md。

很高兴能弄清楚出了什么问题。

3 个赞

我可以告诉你我使用的确切过程。也许我所做的过程中有什么是错误的。我愿意完全承认我在这里犯了错误!

  1. 拥有域名。它是 discourse.domain.dev(域名已明显 redaction)
  2. 设置了电子邮件帐户。我有一个 mailgun 帐户,所以我设置了一个全新的用户用于 SMTP。电子邮件是 discourse@discourse.domain.dev
  3. 拥有服务器。它是最新的 Ubuntu(Jammy Jellyfish)
  4. apt install docker.io - 无
  5. Git 已安装
  6. 用户是 root
  7. 使用 git clone https://github.com/discourse/discourse_docker.git /var/discourse 克隆
  8. 导航到 cd /var/discourse
  9. chmod 700 containers
  10. 仍然是 root 用户
  11. 运行 ./discourse-setup
  12. 按要求填写信息:discourse.domain.dev
  13. Discourse 管理员电子邮件:my@personal.email
  14. SMTP:smtp.eu.mailgun.org
  15. SMTP 端口:587
  16. 用户名:noreply@discourse.domain.dev
  17. 用户密码:REDACTED
  18. 通知电子邮件:noreply@discourse.domain.dev
  19. Let’s Encrypt 电子邮件:my@personal.email
  20. Maxmind ID:已填入
  21. Max Mind 许可证:已填入
  22. 验证了设置的输入数据。
  23. 按 Enter。
  24. 等待。
  25. 又等了一会儿
  26. 泡了杯茶
  27. 引导过程的最后一行:
    + /usr/bin/docker run --shm-size=512m -d --restart=always -e LANG=en_US.UTF-8 -e RAILS_ENV=production -e UNICORN_WORKERS=8 -e UNICORN_SIDEKIQS=1 -e RUBY_GC_HEAP_GROWTH_MAX_SLOTS=40000 -e RUBY_GC_HEAP_INIT_SLOTS=400000 -e RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR=1.5 -e DISCOURSE_DB_SOCKET=/var/run/postgresql -e DISCOURSE_DB_HOST= -e DISCOURSE_DB_PORT= -e LETSENCRYPT_DIR=/shared/letsencrypt -e DISCOURSE_FORCE_HTTPS=true -e LC_ALL=en_US.UTF-8 -e LANGUAGE=en_US.UTF-8 -e DISCOURSE_HOSTNAME=discourse.domain.dev -e DISCOURSE_DEVELOPER_EMAILS=my@personal.email -e DISCOURSE_SMTP_ADDRESS=smtp.eu.mailgun.org -e DISCOURSE_SMTP_PORT=587 -e DISCOURSE_SMTP_USER_NAME=noreply@discourse.domain.dev -e DISCOURSE_SMTP_PASSWORD=b7fc73b0905b5ffb5f70300f1f796000-1b5736a5-0a60075a -e DISCOURSE_SMTP_DOMAIN=discourse.example.com -e DISCOURSE_NOTIFICATION_EMAIL=noreply@discourse.domain.dev -e LETSENCRYPT_ACCOUNT_EMAIL=my@personal.email -e DISCOURSE_MAXMIND_ACCOUNT_ID=REDACTED -e DISCOURSE_MAXMIND_LICENSE_KEY=REDACTED -h devsite -e DOCKER_HOST_IP=172.17.0.1 --name app -t -p 80:80 -p 443:443 -v /var/discourse/shared/standalone:/shared -v /var/discourse/shared/standalone/log/var-log:/var/log --mac-address REDACTGED local_discourse/app /sbin/boot
    REDACTEDLONGSTRING
  28. 运行 ./discourse-doctor。由于无法连接到 redis 而失败。
  29. 运行 ./launcher rebuild app,未更改配置中的任何内容
  30. 它已构建。一切正常。唯一的区别是最后的 redaction 长字符串。
  31. 运行 ./discourse-doctor。我收到了来自它的测试电子邮件。
  32. 网站已上线,因此我创建了管理员用户帐户。
  33. 点击注册
  34. 它说它正在发送通知电子邮件。
  35. 未收到。
  36. 通过 ./discourse-docter 查看,看到这个:
    Discourse version at discourse.domain.dev: NOT FOUND
    Discourse version at localhost: NOT FOUND
  37. 运行 ./launcher enter app
  38. 运行 rake admin:create
  39. 输入电子邮件:my@personal.email
  40. 重置密码,因为用户已存在
  41. 显示“您的帐户现在拥有管理员权限!”
  42. 登录到域上的站点
  43. 转到 discourse.domain.dev/logs - 看到“Sidekiq heartbeat test failed, restarting`
  44. 转到 discourse.domain.dev/sidekiq:看到:
  45. 转到查看 Enqueued
  46. 点击“critical”并展开内容,再次看到“to_address”=nil

停止,并寻求帮助。

这是今天在全新机器上完全重做。这些是我之前使用的确切步骤。请,如果我搞砸了,请告诉我!:pray:


系统设置:

  • CPU:4 核
  • RAM:16 GB
  • 操作系统:Ubuntu LTS 64 位 24.04
  • 存储:NVMe 500G
  • Postgres 版本:13.16-1
  • Redis:7.0.7
  • Ruby:3.3.4
1 个赞