Ao tentar conceder direitos de administrador a um usuário (qualquer usuário, na verdade), recebo apenas a seguinte mensagem de erro (após clicar no link de confirmação):
Verifiquei os logs e encontrei as seguintes mensagens:
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
Na mesma época, também recebo uma mensagem sobre o MaxMind não estar funcionando corretamente, não tenho certeza se isso tem algo a ver com o problema (não encontrei nenhuma configuração relacionada na interface de administração):
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
Não, clicar no botão "Conceder Administrador" funciona.
O processo completo é o seguinte:
Eu clico no botão "Conceder Administrador", a aplicação me apresenta um modal "Enviamos um e-mail para você para verificar o novo administrador. Por favor, abra-o e siga as instruções."
Eu clico no link de confirmação no e-mail ("Confirmar Conta de Administrador"), que me leva a uma página de confirmação.
Na página de confirmação, eu clico no botão "Conceder Acesso de Administrador", que então produz a página de erro (veja a captura de tela na minha postagem original) e também as mensagens de erro no log.
Eu também acabei de notar a seguinte mensagem mais acima no log (prefixada com o número 46 - isso significa que foi repetida 46 vezes?):
Erro ao garantir a consistência do Grupo: Falha na validação: O nome já foi utilizado
O Discourse é muito particular sobre esses IDs, staff deve ser 2, admins devem ser 1. Se de alguma forma você tiver um grupo diferente com esse nome, pode haver problemas. Eu também garantiria que nenhum usuário seja chamado de admins.
Parece com isto (há muitos outros grupos, mas eles foram claramente criados por nós e não tinham qualquer semelhança com os grupos do sistema, por isso não os incluí abaixo):
Notei que não há o grupo staff, apenas Staff - se staff sempre tem o id 3, então acho que isso indica que alguém o removeu e criou um novo grupo (id 42).
É suficiente criar staff novamente ou como posso resolver isto?
Sim, isso resolveu o problema! O grupo existia, mas alguém o renomeou - como isso basicamente quebra a funcionalidade principal, estou me perguntando se a renomeação de grupos do sistema deveria ser proibida na interface do usuário.
Para registro, caso alguém se encontre em uma situação semelhante:
docker exec -it app /bin/bash
su - postgres
psql -d discourse
discourse=# update groups set name='staff' where id=3;
\q