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!