Hallo zusammen,
Ich habe ein seltsames Problem mit einer frischen Discourse-Installation und wäre für jede Hilfe dankbar.
Umgebung
- Discourse Docker (neueste stabile Version)
- Ubuntu 24.04
- Frische Installation mit
discourse_docker - Keine Plugins außer OpenID Connect
- Git-Repository ist sauber
- Reverse-Proxy mit nginx
- Nur HTTP (noch kein HTTPS)
- Lokales Git-Repository existiert und ist auf dem
latest-Branch
Das seltsame Verhalten
Anonyme Benutzer:
Startseite lädt normal
Normale authentifizierte Benutzer:
Funktionieren normal
Benutzer, die über OpenID Connect authentifiziert sind:
Funktionieren normal
Aber jeder lokale Discourse-Admin-Benutzer erhält einen Timeout und schließlich:
Oops
Die Software, die dieses Diskussionsforum antreibt, ist auf ein unerwartetes Problem gestoßen.
oder manchmal
Der Server hat derzeit eine hohe Last.
Was wir getestet haben
Wir haben einen brandneuen lokalen Admin mit
rake admin:create
erstellt.
Ergebnis:
- Benutzer als Admin →
500 Timeout - derselbe Benutzer nach Änderung von
u.admin = false
u.save!
→
funktioniert sofort
Das Problem ist also nur dann reproduzierbar, wenn admin == true ist.
Protokoll
Der Worker läuft immer nach etwa 30 Sekunden in einen Timeout.
Rückverfolgung:
GitUtils.try_git
GitUtils.has_commit?
DiscourseUpdates.new_features
DiscourseUpdates.has_unseen_features?
CurrentUserSerializer
ApplicationLayoutPreloader
Der Timeout tritt immer hier auf:
/var/www/discourse/lib/git_utils.rb:33
Kernel#`
Wichtige Beobachtung
Das manuelle Ausführen von Git innerhalb des Containers ist blitzschnell.
Zum Beispiel:
git rev-parse HEAD
liefert in etwa 7 ms ein Ergebnis.
Außerdem:
git merge-base --is-ancestor <current_commit> HEAD
liefert sofort ein Ergebnis.
Git selbst ist also nicht langsam.
Redis
new_features scheint nicht zu existieren:
redis-cli exists new_features latest_new_feature_created_at
(integer) 0
Frage
Warum würde GitUtils.has_commit? nur für Admin-Benutzer blockieren, während jeder Git-Befehl von der Shell aus sofort ausgeführt wird?
Gibt es ein bekanntes Problem in den neuesten Discourse-Versionen, bei dem DiscourseUpdates oder new_features zu Timeouts nur für Admins führt?
Jede Idee, wo ich als Nächstes untersuchen sollte, wäre sehr willkommen.
Danke!