Администраторы всегда получают ошибку 500 (таймаут) в GitUtils.has_commit?, в то время как обычные пользователи работают нормально

Привет всем,

У меня возникла странная проблема с новой установкой Discourse, и я буду признателен за любые советы.

Окружение

  • Discourse Docker (последняя стабильная версия)
  • Ubuntu 24.04
  • Чистая установка с помощью discourse_docker
  • Нет плагинов, кроме OpenID Connect
  • Git-репозиторий чистый
  • Обратный прокси-сервер с nginx
  • Только HTTP (HTTPS пока нет)
  • Локальный Git-репозиторий существует и находится на ветке latest

Странное поведение

Анонимные пользователи:

  • :white_check_mark: Домашняя страница загружается нормально

Обычные аутентифицированные пользователи:

  • :white_check_mark: Работают нормально

Пользователи, аутентифицированные через OpenID Connect:

  • :white_check_mark: Работают нормально

Но каждый локальный администратор Discourse получает тайм-аут и в итоге:


Ой

Программное обеспечение, обеспечивающее работу этого форума, столкнулось с неожиданной проблемой.

или иногда


Сервер в настоящее время испытывает высокую нагрузку.

Что мы тестировали

Мы создали совершенно нового локального администратора с помощью


rake admin:create

Результат:

  • пользователь как администратор → :cross_mark: тайм-аут 500
  • тот же пользователь после изменения

u.admin = false
u.save!

:white_check_mark: работает сразу

Таким образом, проблема воспроизводится только когда 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 вызывает тайм-ауты только для администраторов?

Любые идеи о том, куда двигаться дальше, будут greatly appreciated.

Спасибо!