大家好,
我在一个全新的 Discourse 安装中遇到了一个奇怪的问题,非常希望能得到一些指导。
环境
- Discourse Docker(最新稳定版)
- Ubuntu 24.04
- 使用
discourse_docker进行全新安装 - 除 OpenID Connect 外没有其他插件
- Git 仓库是干净的
- 使用 nginx 反向代理
- 仅 HTTP(尚未启用 HTTPS)
- 本地 Git 仓库存在且位于
latest分支
奇怪的现象
匿名用户:
主页正常加载
普通已认证用户:
工作正常
通过 OpenID Connect 认证的用户:
工作正常
但所有本地 Discourse 管理员用户都会超时,并最终显示:
Oops
驱动此讨论论坛的软件遇到了意外问题。
或者有时显示:
服务器当前负载过高。
我们进行的测试
我们创建了一个全新的本地管理员用户,使用
rake admin:create
结果:
- 用户作为管理员 →
500 超时 - 同一用户在修改后
u.admin = false
u.save!
→
立即恢复正常
因此,该问题仅在 admin == true 时可复现。
日志
工作进程总是在大约 30 秒后超时。
回溯:
GitUtils.try_git
GitUtils.has_commit?
DiscourseUpdates.new_features
DiscourseUpdates.has_unseen_features?
CurrentUserSerializer
ApplicationLayoutPreloader
超时总是发生在以下位置:
/var/www/discourse/lib/git_utils.rb:33
Kernel#`
重要观察
在容器内手动运行 Git 是瞬间完成的。
例如:
git rev-parse HEAD
返回结果仅需约 7 毫秒。
此外:
git merge-base --is-ancestor <current_commit> HEAD
也是立即返回的。
因此,Git 本身并不慢。
Redis
new_features 似乎不存在:
redis-cli exists new_features latest_new_feature_created_at
(integer) 0
问题
为什么 GitUtils.has_commit? 仅对管理员用户造成阻塞,而从命令行执行的所有 Git 命令都瞬间完成?
在近期的 Discourse 版本中,是否有已知的 DiscourseUpdates 或 new_features 导致仅管理员超时的 bug?
任何关于下一步调查方向的建议都将不胜感激。
谢谢!