Erros 500 e falha na atualização

Nossa instalação do Discourse, uma instalação padrão baseada no repositório oficial, mas usando integração SSO como seu único sistema de login, está em funcionamento há vários anos atendendo a uma grande base de usuários, rodando em um servidor dedicado baseado em Ubuntu que opera outros aplicativos, sem problemas significativos, para minha satisfação.

Infelizmente, recentemente sofreu uma falha espontânea e não parece mais estar funcionando.

Os relatos iniciais foram de que o site apresentava muitos erros 500 aparentemente aleatórios e as notificações não estavam sendo entregues, mas, fora isso, ainda funcionava. O contexto era que a instalação foi atualizada pela última vez há um ou dois meses e nenhuma alteração foi feita nela ou no ambiente do servidor, então este foi um desenvolvimento surpreendente.

Confirmamos que os erros 500 estavam ocorrendo e, primeiro, tentamos reiniciar o servidor e o contêiner sem sucesso. Um “apt-get update” foi executado para atualizar todos os pacotes. Também tentamos atualizar o Discourse pelo backend, mas ao fazer login com o link de administrador, nenhum link de login estava sendo enviado por e-mail, e após a reinicialização do contêiner, a página de login do administrador gerou apenas um erro 500.

Também verifiquei o ambiente do servidor em busca de quaisquer anormalidades de hardware, sistema operacional ou outras, e nada parecia estar errado.

Em seguida, tentamos a reconstrução completa e a atualização “git pull” via CLI. Isso falhou durante as migrações de banco de dados da atualização com o seguinte erro:

I, [2022-08-09T23:15:21.229857 #1]  INFO -- : cd /var/www/discourse & su discourse -c 'LOAD_PLUGINS=0 bundle exec rake plugin:pull_compatible_all'
I, [2022-08-09T23:15:23.938876 #1]  INFO -- : docker_manager is already at latest compatible version

I, [2022-08-09T23:15:23.939220 #1]  INFO -- : cd /var/www/discourse & su discourse -c 'bundle exec rake db:migrate'
2022-08-09 23:15:28.956 UTC [835] discourse@discourse ERROR:  duplicate key value violates unique constraint "idx_bookmarks_user_polymorphic_unique"
2022-08-09 23:15:28.956 UTC [835] discourse@discourse DETAIL:  Key (user_id, bookmarkable_type, bookmarkable_id)=(4115, Post, 103355) already exists.
2022-08-09 23:15:28.956 UTC [835] discourse@discourse STATEMENT:  UPDATE bookmarks
        SET bookmarkable_id = post_id, bookmarkable_type = 'Post'
        WHERE NOT bookmarks.for_topic AND bookmarkable_id IS NULL

rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

ERROR:  duplicate key value violates unique constraint "idx_bookmarks_user_polymorphic_unique"
DETAIL:  Key (user_id, bookmarkable_type, bookmarkable_id)=(4115, Post, 103355) already exists.

Se houver uma inconsistência no banco de dados, não tenho ideia de como ela ocorreu… Posso fornecer o restante do histórico do console, se necessário.

Executar “./discourse-doctor” foi concluído sem problemas aparentes, exceto por um aviso sobre a configuração do servidor de e-mail - “certificate verify failed (self signed certificate)” - o que pode explicar por que os e-mails não estavam sendo enviados. Anteriormente, eles estavam sendo enviados com a configuração existente, e o servidor de e-mail parece estar funcionando sem problemas, então não tenho certeza sobre isso.

Atualmente, o site está completamente inativo (apenas retornando erros 500 após a atualização falha). Não temos ideia de como proceder neste ponto, além de tentar buscar suporte externo. Qualquer orientação seria muito apreciada!

1 curtida

Parece que um índice está corrompido ou algo semelhante. Você precisará excluir ou alterar esses registros para que o banco de dados possa ser migrado.

Se você está familiarizado com SQL, talvez consiga descobrir, talvez com um pouco de ajuda aqui. Se você estiver realmente preso e tiver um orçamento, pode entrar em contato comigo ou perguntar no Marketplace.

2 curtidas