Aufgrund eines Fehlers keine Administratorrechte gewähren können

Hallo!

Wenn ich versuche, einem Benutzer (eigentlich jedem Benutzer) Administratorrechte zu gewähren, erhalte ich nach dem Klicken auf den Bestätigungslink nur die folgende Fehlermeldung:

Ich habe die Protokolle überprüft und die folgenden Meldungen gefunden:

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

Etwa zur gleichen Zeit erhalte ich auch eine Meldung, dass MaxMind nicht richtig funktioniert. Ich bin mir nicht sicher, ob dies damit zusammenhängt (ich habe keine entsprechenden Einstellungen in der Admin-Oberfläche gefunden):

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

Wie kann ich dies weiter debuggen?

Danke,
Hannes

Tritt dieser Fehler auf, wenn Sie auf die Schaltfläche „Administrator gewähren“ klicken?

Nein, das Klicken auf die Schaltfläche „Administrator gewähren“ funktioniert.

Der vollständige Vorgang sieht wie folgt aus:

  1. Ich klicke auf die Schaltfläche „Administrator gewähren“, die Anwendung zeigt mir ein Modal an: „Wir haben Ihnen eine E-Mail gesendet, um den neuen Administrator zu verifizieren. Bitte öffnen Sie sie und befolgen Sie die Anweisungen.“
  2. Ich klicke auf den Bestätigungslink in der E-Mail („Administrator-Konto bestätigen“), der mich zu einer Bestätigungsseite weiterleitet.
  3. Auf der Bestätigungsseite klicke ich auf die Schaltfläche „Administratorzugriff gewähren“, was dann die Fehlerseite (siehe Screenshot in meinem ursprünglichen Beitrag) und auch die Fehlermeldungen im Protokoll erzeugt.

Mir ist gerade auch die folgende Meldung weiter oben im Protokoll aufgefallen (vorangestellt mit der Zahl 46 – bedeutet dies, dass sie 46 Mal wiederholt wurde?):

Error ensuring consistency for Group: Validation failed: Name has already been taken

Dies ist ein sehr interessanter Grenzfall. Angenommen, dies ist selbst gehostet, was gibt dies zurück?

./launcher enter app
rails c
Group.pluck(:name, :id)
=> [["everyone", 0],
 ["moderators", 2],
 ["admins", 1],
 ["staff", 3],
 ["trust_level_0", 10],
 ["trust_level_1", 11],
 ["trust_level_2", 12],
 ["trust_level_3", 13],
 ["trust_level_4", 14]]

Discourse ist sehr eigen, was diese IDs angeht. Staff muss 2 sein, Admins müssen 1 sein. Wenn Sie irgendwie eine andere Gruppe mit diesem Namen haben, könnte es Probleme geben. Ich würde auch sicherstellen, dass kein Benutzer admins heißt.

Es sieht so aus (es gibt noch viele weitere Gruppen, aber sie wurden eindeutig von uns erstellt und hatten keine Ähnlichkeit mit den Systemgruppen, daher habe ich sie unten nicht aufgeführt):

=> [["everyone", 0],
 ["moderators", 2],
 ["admins", 1],
 ["trust_level_0", 10]
 ["trust_level_1", 11],
 ["trust_level_2", 12],
 ["trust_level_3", 13],
 ["trust_level_4", 14],
 ["Staff", 42]]

Mir fällt auf, dass es keine Gruppe staff gibt, sondern nur Staff – wenn staff immer die ID 3 hat, dann deutet das wohl darauf hin, dass jemand sie entfernt und eine neue Gruppe (ID 42) erstellt hat.

Reicht es, staff erneut zu erstellen, oder wie kann ich das lösen?

Ja, ich denke, dass das Umbenennen deiner Mitarbeitergruppe ausreicht, um das Problem zu lösen.

1 „Gefällt mir“

Die Benutzeroberfläche erlaubt mir nicht, dies zu tun:

Muss ich das direkt in der Datenbank machen?

Ist es möglich, die Gruppe über die Befehlszeile umzubenennen, oder wie kann ich diese Situation lösen?

Versuchen Sie es direkt aus der Datenbank, dann sollte es sicher sein

2 „Gefällt mir“

Ja, das hat funktioniert! Die Gruppe existierte, aber jemand hatte sie umbenannt – da dies die Kernfunktionalität im Grunde beeinträchtigt, frage ich mich, ob die Umbenennung von Systemgruppen in der Benutzeroberfläche untersagt werden sollte.

Zu Ihrer Information, falls jemand in eine ähnliche Situation gerät:

docker exec -it app /bin/bash
su - postgres
psql -d discourse
discourse=# update groups set name='staff' where id=3;
\q
5 „Gefällt mir“

Ja, es sollte absolut ein Zustand sein, in den man nicht geraten kann.

3 „Gefällt mir“