Impossible d'accorder les droits d'administrateur en raison d'une erreur

Salut !

Lorsque j’essaie d’accorder des droits d’administrateur à un utilisateur (n’importe quel utilisateur en fait), je reçois uniquement le message d’erreur suivant (après avoir cliqué sur le lien de confirmation) :

J’ai vérifié les journaux et trouvé les messages suivants :

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

À peu près au même moment, j’ai également reçu un message indiquant que MaxMind ne fonctionnait pas correctement, je ne suis pas sûr que cela ait quelque chose à voir avec le problème (je n’ai trouvé aucun paramètre pertinent dans l’interface d’administration) :

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

Comment puis-je déboguer cela davantage ?

Merci,
Hannes

Vous obtenez cette erreur lorsque vous cliquez sur le bouton « Accorder l’administration » ?

Non, cliquer sur le bouton « Accorder l’administration » fonctionne.

Le processus complet est le suivant :

  1. Je clique sur le bouton « Accorder l’administration », l’application me présente une fenêtre modale « Nous vous avons envoyé un e-mail pour vérifier le nouvel administrateur. Veuillez l’ouvrir et suivre les instructions. »
  2. Je clique sur le lien de confirmation dans l’e-mail (« Confirmer le compte administrateur ») qui m’amène à une page de confirmation.
  3. Sur la page de confirmation, je clique sur le bouton « Accorder l’accès administrateur », ce qui génère la page d’erreur (voir capture d’écran dans mon message d’origine) ainsi que les messages d’erreur dans le journal.

Je viens également de remarquer le message suivant plus haut dans le journal (précédé du numéro 46 - cela signifie-t-il qu’il a été répété 46 fois ?) :

Erreur lors de la garantie de la cohérence pour le groupe : Échec de la validation : le nom a déjà été pris

Ceci semble être un cas limite très intéressant. En supposant qu’il s’agisse d’un auto-hébergement, que renvoie ceci ?

./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 est très pointilleux sur ces identifiants, le groupe staff doit avoir l’ID 2, et le groupe admins doit avoir l’ID 1. Si, d’une manière ou d’une autre, vous avez un groupe différent avec ce nom, cela pourrait causer des problèmes. Je m’assurerais également qu’aucun utilisateur ne s’appelle admins.

Il ressemble à ceci (il y a beaucoup plus de groupes, mais ils ont clairement été créés par nous et ne ressemblaient en rien aux groupes système, donc je ne les ai pas inclus ci-dessous) :

=> [["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]]

Je remarque qu’il n’y a pas de groupe staff, seulement Staff - si staff a toujours l’id 3, alors je suppose que cela indique que quelqu’un l’a supprimé et créé un nouveau groupe (id 42).

Est-ce suffisant de recréer staff ou comment puis-je résoudre ce problème ?

Oui, je pense que renommer votre groupe de personnel sera suffisant pour régler le problème

1 « J'aime »

L’interface utilisateur ne me permet pas de le faire :

Dois-je le faire directement dans la base de données ?

Est-il possible de renommer le groupe en ligne de commande ou comment puis-je résoudre cette situation ?

Essayez directement depuis la base de données, alors, cela devrait être sûr

2 « J'aime »

Oui, cela a fonctionné ! Le groupe existait, mais quelqu’un l’avait renommé - comme cela casse essentiellement des fonctionnalités essentielles, je me demande si le renommage des groupes système ne devrait pas être interdit dans l’interface utilisateur.

Pour information, au cas où quelqu’un se retrouverait dans une situation similaire :

docker exec -it app /bin/bash
su - postgres
psql -d discourse
discourse=# update groups set name='staff' where id=3;
\q
5 « J'aime »

Oui, cela devrait absolument être un état dans lequel on ne peut pas entrer.

3 « J'aime »