皆さん、こんにちは
Discourseの新しいインストールで奇妙な問題に直面しており、ご助言をいただければ幸いです。
環境
- Discourse Docker (最新安定版)
- Ubuntu 24.04
discourse_dockerを使用した新規インストール- プラグインは OpenID Connect のみ
- Git リポジトリはクリーン
- nginx によるリバースプロキシ
- HTTP のみ (HTTPS は未設定)
- ローカルの Git リポジトリが存在し、
latestブランチ上にある
奇妙な動作
匿名ユーザー:
ホームページは通常通り読み込まれる
通常の認証済みユーザー:
通常通り動作する
OpenID Connect 経由で認証されたユーザー:
通常通り動作する
しかし、すべてのローカルの Discourse 管理者ユーザーはタイムアウトし、最終的に以下のようなエラーが表示されます:
Oops
このディスカッションフォーラムを提供するソフトウェアで予期せぬ問題が発生しました。
または、場合によっては
Server is currently experiencing high load.
テスト内容
以下を使用して、新しいローカル管理者を作成しました。
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
は約 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 が管理者のみでタイムアウトを引き起こす既知の問題はありますか?
次に調査すべき場所についてのアイデアをいただければ幸いです。
ありがとうございます!