Quando tento di concedere i diritti di amministratore a un utente (in realtà a qualsiasi utente) ricevo solo il seguente messaggio di errore (dopo aver cliccato sul link di conferma):
Ho controllato i log e ho trovato i seguenti messaggi:
ActiveRecord::RecordInvalid (Validation failed: Name has already been taken) app/models/group.rb:607:in 'refresh_automatic_group!' app/models/group.rb:666:in 'block in refresh_automatic_groups!' app/m
Failed to handle exception in exception app middleware : ActiveRecord::RecordInvalid : Validation failed: Name has already been taken
Circa nello stesso periodo ricevo anche un messaggio sul malfunzionamento di MaxMind, non sono sicuro se questo abbia a che fare con il problema (non ho trovato impostazioni correlate nell’interfaccia di amministrazione):
MaxMindDB (/var/www/discourse/vendor/data/GeoLite2-City.mmdb) could not be found: No such file or directory @ rb_sysopen - /var/www/discourse/vendor/data/GeoLite2-City.mmdb
No, fare clic sul pulsante “Concedi amministratore” funziona.
Il processo completo è il seguente:
Faccio clic sul pulsante “Concedi amministratore”, l’applicazione mi presenta una finestra modale “Ti abbiamo inviato un’e-mail per verificare il nuovo amministratore. Aprila e segui le istruzioni.”
Faccio clic sul collegamento di conferma nell’e-mail (“Conferma account amministratore”) che mi porta a una pagina di conferma.
Nella pagina di conferma faccio clic sul pulsante “Concedi accesso amministratore”, che quindi produce la pagina di errore (vedi screenshot nel mio post originale) e anche i messaggi di errore nel log.
Ho anche appena notato il seguente messaggio più in alto nel log (preceduto dal numero 46, significa che è stato ripetuto 46 volte?):
Errore nel garantire la coerenza per il Gruppo: Convalida non riuscita: Il nome è già stato preso
Discourse è molto particolare riguardo a questi ID, lo staff deve essere 2, gli amministratori devono essere 1. Se in qualche modo hai un gruppo diverso con quel nome, potrebbero esserci problemi. Mi assicurerei anche che nessun utente si chiami admins.
Sembra che sia così (ci sono molti altri gruppi, ma erano chiaramente creati da noi e non avevano alcuna somiglianza con i gruppi di sistema, quindi non li ho inclusi di seguito):
Noto che non c’è il gruppo staff, solo Staff - se staff ha sempre id 3 allora immagino che questo indichi che qualcuno lo ha rimosso e creato un nuovo gruppo (id 42).
È sufficiente ricreare staff o come posso risolvere questo problema?
Sì, questo ha funzionato! Il gruppo esisteva, ma qualcuno lo aveva rinominato: poiché questo interrompe fondamentalmente le funzionalità principali, mi chiedo se la ridenominazione dei gruppi di sistema dovrebbe essere vietata nell’interfaccia utente.
Per la cronaca, nel caso in cui qualcuno si trovi in una situazione simile:
docker exec -it app /bin/bash
su - postgres
psql -d discourse
discourse=# update groups set name='staff' where id=3;
\q