관리자 사용자는 GitUtils.has_commit?에서 항상 500 타임아웃이 발생하지만 일반 사용자는 정상 작동

안녕하세요,

새로 설치한 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 관리자(admin) 사용자는 타임아웃이 발생하고 결국 다음과 같은 오류가 나타납니다:


Oops

The software powering this discussion forum encountered an unexpected problem.

또는 때로는


Server is currently experiencing high load.

테스트한 내용

다음 명령을 사용하여 완전히 새로운 로컬 관리자를 생성했습니다.


rake admin:create

결과:

  • 관리자(Admin)로 사용자 설정 → :cross_mark: 500 타임아웃
  • 같은 사용자의 다음 설정을 변경한 후

u.admin = false
u.save!

:white_check_mark: 즉시 정상 작동

따라서 이 문제는 admin == true일 때만 재현됩니다.

로그

워커(worker)는 항상 약 30초 후 타임아웃됩니다.

백트레이스(Backtrace):


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

는 약 7ms 만에 반환됩니다.

또한:


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

도 즉시 반환됩니다.

즉, Git 자체는 느리지 않습니다.

Redis

new_features가 존재하지 않는 것으로 보입니다:


redis-cli exists new_features latest_new_feature_created_at

(integer) 0

질문

모든 Git 명령이 셸에서 즉시 실행되는 반면, 왜 GitUtils.has_commit?는 관리자 사용자에 대해서만 블로킹(block)될까요?

최근 Discourse 버전에서 DiscourseUpdatesnew_features가 관리자 전용 타임아웃을 유발하는 알려진 문제가 있을까요?

다음으로 어떤 부분을 조사해야 할지 아이디어가 있다면 감사하겠습니다.

감사합니다!

1개의 좋아요