# 管理员用户在 GitUtils.has\_commit? 中总是遇到 500 超时，而普通用户工作正常

**URL:** <https://meta.discourse.org/t/admin-users-always-get-500-timeout-in-gitutils-has-commit-while-normal-users-work-fine/406903>\
**Category:** Bug\
**Created:** [2026年七月6日 12:16 UTC](https://meta.discourse.org/t/admin-users-always-get-500-timeout-in-gitutils-has-commit-while-normal-users-work-fine/406903 "2026-07-06T12:16:34Z")\
**Posts on this page:** 1\
**Showing post:** 1

<div class="post-metadata">

**Author:** ![aliarjmandi](https://avatars.discourse-cdn.com/v4/letter/a/2acd7d/32.png) [@aliarjmandi](https://meta.discourse.org/u/aliarjmandi)\
**Post date:** [2026年七月6日 12:16 UTC](https://meta.discourse.org/t/admin-users-always-get-500-timeout-in-gitutils-has-commit-while-normal-users-work-fine/406903/1 "2026-07-06T12:16:35Z")

</div>

# 

大家好，

我在一个全新的 Discourse 安装中遇到了一个奇怪的问题，非常希望能得到一些指导。

## 环境

- Discourse Docker（最新稳定版）
- Ubuntu 24.04
- 使用 `discourse_docker` 进行全新安装
- 除 OpenID Connect 外没有其他插件
- Git 仓库是干净的
- 使用 nginx 反向代理
- 仅 HTTP（尚未启用 HTTPS）
- 本地 Git 仓库存在且位于 `latest` 分支

## 奇怪的现象

匿名用户：

- ✅ 主页正常加载

普通已认证用户：

- ✅ 工作正常

通过 OpenID Connect 认证的用户：

- ✅ 工作正常

但 **所有本地 Discourse 管理员用户** 都会超时，并最终显示：

```plaintext

```

```plaintext
Oops

驱动此讨论论坛的软件遇到了意外问题。

```

或者有时显示：

```plaintext

```

```plaintext
服务器当前负载过高。

```

## 我们进行的测试

我们创建了一个全新的本地管理员用户，使用

```plaintext

```

```plaintext
rake admin:create

```

结果：

- 用户作为管理员 → ❌ 500 超时
- 同一用户在修改后

```plaintext

```

```plaintext
u.admin = false
u.save!

```

→ ✅ 立即恢复正常

因此，该问题仅在 `admin == true` 时可复现。

## 日志

工作进程总是在大约 **30 秒** 后超时。

回溯：

```plaintext

```

```plaintext
GitUtils.try_git
GitUtils.has_commit?
DiscourseUpdates.new_features
DiscourseUpdates.has_unseen_features?
CurrentUserSerializer
ApplicationLayoutPreloader

```

超时总是发生在以下位置：

```plaintext

```

```plaintext
/var/www/discourse/lib/git_utils.rb:33
Kernel#`

```

## 重要观察

在容器内手动运行 Git 是瞬间完成的。

例如：

```plaintext

```

```plaintext
git rev-parse HEAD

```

返回结果仅需约 **7 毫秒** 。

此外：

```plaintext

```

```plaintext
git merge-base --is-ancestor <current_commit> HEAD

```

也是立即返回的。

因此，Git 本身并不慢。

## Redis

`new_features` 似乎不存在：

```plaintext

```

```plaintext
redis-cli exists new_features latest_new_feature_created_at

(integer) 0

```

## 问题

为什么 `GitUtils.has_commit?` 仅对管理员用户造成阻塞，而从命令行执行的所有 Git 命令都瞬间完成？

在近期的 Discourse 版本中，是否有已知的 `DiscourseUpdates` 或 `new_features` 导致仅管理员超时的 bug？

任何关于下一步调查方向的建议都将不胜感激。

谢谢！

---

_[View the full topic](https://meta.discourse.org/t/admin-users-always-get-500-timeout-in-gitutils-has-commit-while-normal-users-work-fine/406903)._
