Ciao a tutti,
Sto riscontrando un problema strano con una nuova installazione di Discourse e apprezzerei qualsiasi suggerimento.
Ambiente
- Discourse Docker (ultima versione stabile)
- Ubuntu 24.04
- Installazione pulita usando
discourse_docker - Nessun plugin tranne OpenID Connect
- Repository Git pulito
- Reverse proxy con nginx
- Solo HTTP (ancora nessun HTTPS)
- Repository Git locale esistente e sul ramo
latest
Il comportamento strano
Utenti anonimi:
La homepage si carica normalmente
Utenti autenticati normali:
Funzionano normalmente
Utenti autenticati tramite OpenID Connect:
Funzionano normalmente
Ma ogni utente admin locale di Discourse riceve un timeout e alla fine:
Oops
Il software che alimenta questo forum di discussione ha incontrato un problema imprevisto.
o a volte
Il server è attualmente sottoposto a un carico elevato.
Cosa abbiamo testato
Abbiamo creato un nuovo admin locale usando
rake admin:create
Risultato:
- utente come Admin →
timeout 500 - stesso utente dopo aver modificato
u.admin = false
u.save!
→
funziona immediatamente
Quindi il problema è riproducibile solo quando admin == true.
Log
Il worker va sempre in timeout dopo circa 30 secondi.
Backtrace:
GitUtils.try_git
GitUtils.has_commit?
DiscourseUpdates.new_features
DiscourseUpdates.has_unseen_features?
CurrentUserSerializer
ApplicationLayoutPreloader
Il timeout si verifica sempre qui:
/var/www/discourse/lib/git_utils.rb:33
Kernel#`
Osservazione importante
Eseguire Git manualmente all’interno del contenitore è istantaneo.
Ad esempio:
git rev-parse HEAD
ritorna in circa 7 ms.
Inoltre:
git merge-base --is-ancestor <current_commit> HEAD
ritorna immediatamente.
Quindi Git in sé non è lento.
Redis
new_features non sembra esistere:
redis-cli exists new_features latest_new_feature_created_at
(integer) 0
Domanda
Perché GitUtils.has_commit? bloccherebbe solo per gli utenti admin mentre ogni comando Git viene eseguito istantaneamente da shell?
C’è qualche problema noto nelle versioni recenti di Discourse in cui DiscourseUpdates o new_features causa timeout solo per gli admin?
Qualsiasi idea su dove indagare ulteriormente sarebbe molto apprezzata.
Grazie!