API 调用因 main_user_record 的 silenced_till 字段问题而失败

描述
在使用 API 获取活跃用户时,/admin/users/list/active.json 的某些页面返回 HTTP 500 错误。

临时解决方案
如果跳过有问题的页面,其他页面可以正常获取。

错误信息
导致 HTTP 500 的服务器错误:

NoMethodError: undefined method '[]' for nil (NoMethodError)

main_user_record[:silenced_till]
^^^^^^^^^^^^^^^^


from app/models/user.rb:1335:in `silenced_till'
from active_record/attribute_methods/query.rb:48:in `public_send'
from active_record/attribute_methods/query.rb:48:in `query_attribute'
from active_model/attribute_methods.rb:273:in `silenced_till?'
from app/serializers/admin_user_list_serializer.rb:51:in `include_silenced_till?'
from active_model/serializer.rb:375:in `include?'
...

系统日志显示,我们在 2025 年 10 月下旬从 Discourse v3.5.1 升级到 v3.5.2 后开始出现这些错误。相关代码行是在 FIX: Delegate silenced_till from anonymous user to main user account · Pull Request #32416 · discourse/discourse 中引入的,具体讨论见 https://meta.discourse.org/t/silenced-user-can-circumvent-it-entering-anonymous-mode/320052/12。

解决方案
我本人并非 Ruby 专家,但根据我的观察,该问题出现在包含自 v3.5.2 变更以来未活跃用户的 API JSON 页面中。我推测,此次变更可能遗漏了处理某些边界情况的数据库迁移。

您运行的是最新版本的 Discourse 吗?我相信您的问题已在几个月前通过以下提交修复:

如果您仍在运行 v3.5.2,那就是问题所在,因为该版本已严重过时。如前所述,该问题可能已在更新版本中得到修复。请尝试将您的站点升级到更现代的版本,然后重试。

@zogstrip:是的,我们运行的是 2026.1.3 版本(最新的 ESR 版本,于 2026 年 3 月 31 日发布)。看起来该修复已包含在 2026.2.0 版本中(但未向后移植),因此当前的 ESR 版本刚好错过了它。