Acabei de alterar o nome de usuário de uma pessoa xxx a pedido dela. Ela queria assumir um nome de usuário inativo yyy. Então, primeiro mudei o nome de usuário inativo yyy para algo como yyy1 e, em seguida, alterei o nome de usuário dessa pessoa de xxx para yyy.
Nesse ponto, inicialmente, o usuário não conseguia publicar nada e vi o seguinte erro nos logs:
Exceção de Job: PG::UniqueViolation: ERRO: valor de chave duplicada viola a restrição de unicidade "index_users_on_username_lower" DETALHE: A chave (username_lower)=(mina) já existe.
Tentei reverter o nome de usuário para o que era antes, mas agora todo o histórico deles sumiu. O que exatamente deu errado aqui?
A propósito, não sei por que estou recebendo um erro para este usuário (username_lower)=(mina) de forma alguma. Nunca fiz nenhuma alteração nele e parece ser um usuário inativo. No entanto, também observo um comportamento estranho no perfil dele. Se eu abrir a página de notificações, recebo um erro 404.
Ok, executei os passos. Se fiz algo diferente do que você fez, por favor, me avise.
Há dois usuários:
xxx (conta ativa)
yyy (conta inativa)
Altere yyy para yyy1
Altere xxx para yyy
( funcionou para mim)
Tente postar usando a nova conta yyy
( funcionou para mim)
Altere yyy de volta para xxx
( funcionou para mim, sem perda do histórico do usuário)
Não tive nenhum problema durante todo o processo. Uma coisa a notar é que, após alterar o nome de usuário de um usuário na página de administração de usuários, você precisará atualizar a página antes que o botão “Mostrar perfil público” navegue para o usuário correto.
Você pode verificar seus /admin/logs/staff_action_logs para ver se todas as alterações de nome de usuário registradas fazem sentido? Clicar nos avatares dos nomes de usuários listados deve levá-lo à página atual e correta do usuário.
Sim, clicar no avatar me leva à página deles. No entanto, parece-me que a página deles está meio inativa. Por exemplo, não consigo exibir o e-mail deles ou assumir a conta deles:
De acordo com o que vejo neste relatório, primeiro mudei fatemeh para fatemeh12. Depois, mudei fatemeh_baghdadi para fatemeh. Após algum tempo, o usuário me disse que não conseguia publicar nada. Então, pensei que talvez houvesse algo de errado no processo de alteração do nome de usuário e tentei mudar o nome para algo que ainda não tivesse sido usado. Assim, mudei fatemeh (anteriormente fatemeh_baghdadi) para fatemeh74. Em seguida, percebi que o histórico deles havia sido completamente limpo e fiquei nervoso. Então, tentei mudar o nome de volta para o que era no início: de fatemeh74 para fatemeh_baghdadi. E novamente, de fatemeh_baghdadi para fatemeh_baghdadi5, mas nada melhorou. Agora, tenho dois usuários diferentes: fatemeh74 e fatemeh_baghdadi5, que teoricamente deveriam ser a mesma pessoa, mas na verdade são duas pessoas distintas, e uma delas parece não estar funcionando corretamente.
Estou fazendo o meu melhor para acompanhar aqui. Parece uma situação muito estranha!
Você poderia esclarecer o que quer dizer ao afirmar que o histórico deles foi totalmente limpo? fatemeh_baghdadi5 deveria ter vários tópicos e respostas listados na seção de atividade do perfil?
Se for esse o caso, essas postagens agora estão associadas à conta fatemeh74? Elas devem existir em algum lugar no site e estar vinculadas a um usuário específico. Do ponto de vista de um usuário anônimo, não consigo encontrar um usuário com o nome de usuário fatemeh74 no seu site.
Existe um job em segundo plano chamado EnsureDbConsistency que é executado a cada 12 horas. Pode ser interessante dispará-lo manualmente pelo Sidekiq ou aguardar para ver se tudo é corrigido automaticamente nas próximas 12 horas.
Se você acabar tendo duas contas que deveriam ser uma, deverá conseguir mesclá-las. No entanto, eu definitivamente faria um backup antes de tentar isso.
É realmente difícil entender o que está acontecendo sem ter acesso direto a tudo, mas espero que consigamos resolver isso!
No momento em que mudei o nome de usuário, fui ao perfil deles e não vi nenhuma postagem, etc., mas isso foi corrigido depois de um tempo. No entanto, agora fatemeh74, que na verdade parece ser a pessoa correta, está meio inativa. Quero dizer, como você vê, não conseguimos ver a página do perfil deles, embora a postagem deles e outras coisas estejam presentes. Como neste exemplo:
Elas não são realmente uma só; verifiquei o e-mail e o ID deles, e são completamente diferentes. No entanto, de acordo com os passos que segui para mudar os nomes de usuário, elas deveriam ser as mesmas e, na verdade, eu não deveria ter dois usuários aqui.
Obrigado por postar esse exemplo. Isso é definitivamente preocupante.
Você pode encontrá-lo listado em /sidekiq/scheduler. Vale a pena tentar, mas com base no que você acabou de postar, parece que pode haver um problema mais profundo.
Os nomes de usuário são efetivamente insensitive a maiúsculas e minúsculas, então você não deveria conseguir ter dois usuários com o mesmo nome de usuário. No entanto:
Você pode ver o que parecem ser dois nomes de usuário distintos retornados ao pesquisar por fatemeh12. Isso não deveria ter acontecido (não consegui reproduzir). Ambos parecem levar ao mesmo perfil.
Estou sem ideias sobre como prosseguir a partir daqui. Se ninguém se manifestar até mais ou menos este horário amanhã, vou tentar encontrar alguém com novas ideias. Se você encontrar qualquer informação adicional que ache relevante até lá, por favor, poste-a.
O que entendi até agora é o seguinte: Na primeira etapa, tentei mudar fatemeh para fatemeh12 para liberar esse nome de usuário. No entanto, já existia um nome de usuário Fatemeh12, então, na verdade, eu não deveria ter permissão para mudar fatemeh para fatemeh12. Porém, estranhamente, o sistema permitiu que eu fizesse isso e, de alguma forma, o banco de dados foi corrompido a partir desse ponto.
@tshenry você encontrou algo? Agora, o usuário fatemeh74, que havia sumido, de alguma forma foi restaurado. Não sei exatamente como, porém. Quero garantir que isso não aconteça no futuro, então preciso saber por que tenho nomes de usuário iguais com diferenças de maiúsculas e minúsculas. E por que o Discourse não impede isso. Meu Discourse já está atualizado.
Olá Que ótimo ouvir isso. Eu esperava que um job em segundo plano pudesse ajudar após algum tempo. Parece que foi exatamente o que aconteceu.
Ainda não tive a oportunidade de investigar isso mais a fundo. Estamos realmente limitados no que podemos fazer para ajudar, já que não temos acesso ao banco de dados do seu site e só poderíamos fazer essa análise detalhada para nossos clientes hospedados.
Essa é a primeira ocorrência que ouvimos sobre isso acontecer e não consegui reproduzir o comportamento. Suspeito que se trate de um caso raro na sua instância. Com certeza ficaremos atentos a qualquer ocorrência semelhante no futuro. Se quiser tomar um cuidado extra, sugiro apenas verificar se não há ninguém com o mesmo nome de usuário antes de alterar o seu.
Também estamos enfrentando esse mesmo problema há bastante tempo. Claro, não há como reproduzir como o banco de dados chegou a esse estado, mas, de vez em quando, acabamos com usuários que se renomeiam para nomes duplicados durante o período de carência para renomeação, e isso também se aplica a renomeações feitas por administradores.
Não usamos nomes de usuário em Unicode, e isso é bastante problemático às vezes, pois interrompe a tarefa de sincronização do plugin do Patreon, da qual dependemos fortemente para serviços de políticas externas.