Adminユーザーは常に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 管理者ユーザーはタイムアウトし、最終的に以下のようなエラーが表示されます:


Oops

このディスカッションフォーラムを提供するソフトウェアで予期せぬ問題が発生しました。

または、場合によっては


Server is currently experiencing high load.

テスト内容

以下を使用して、新しいローカル管理者を作成しました。


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

は約 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? が管理者ユーザーのみにブロックされるのでしょうか?

最近の Discourse のバージョンで、DiscourseUpdates または new_features が管理者のみでタイムアウトを引き起こす既知の問題はありますか?

次に調査すべき場所についてのアイデアをいただければ幸いです。

ありがとうございます!