Erro de atualização do Discourse "FALHA AO INICIALIZAR"

Olá a todos,

Primeira postagem aqui, obrigado antecipadamente por me receberem. Estou executando um conjunto de atualizações rotineiras, embora atrasadas, no nosso fórum baseado em Discourse (https://forum.troygrady.com), e chegamos a um ponto em que a atualização falha após executar os passos de linha de comando “git pull” e “rebuild”, conforme recomendado pelas instruções na tela.

Veja abaixo a saída do comando “./launcher rebuild app”. Também executei o script “discourse doctor” e posso postar ou enviar um link para essa saída, caso vocês acharem que isso não represente um risco de segurança significativo.

Devo mencionar que, embora seja um desenvolvedor razoavelmente competente em PHP/SQL com experiência ocasional em administração de aplicações Linux, não tenho conhecimento técnico sobre o Discourse, e não fui eu quem configurou a instalação inicial. O clássico caso, sei!

Apenas estou seguindo as instruções na tela, que começaram com o clique nos botões azuis de “upgrade” na interface do Docker. Após a conclusão disso, vi a instrução na tela para fazer login via linha de comando e executar o git pull e o rebuild do launcher. Foi assim que cheguei a este ponto.

Gostaria também de acrescentar que nosso fórum estava funcionando perfeitamente antes disso, sem nenhum problema, caso isso ajude no diagnóstico. A única razão para realizarmos essa atualização é simplesmente manter-nos atualizados com as versões que vocês lançam, para não ficarmos muito desatualizados. Esse é o conflito central da minha mentalidade de “se não está quebrado, não conserte”, com medo de que a atualização cause algum erro além da minha capacidade de resolver. E, de fato, aqui estamos.

No momento em que escrevo, o fórum está completamente offline e, como este é um componente central do nosso negócio, gostaria muito de colocá-lo de volta em operação o mais rápido possível.

Qualquer insight será muito apreciado!

FALHA

Pups::ExecError: cd /var/www/discourse && su discourse -c ‘bundle exec rake db:migrate’ falhou com retorno #<Process::Status: pid 3972 exit 1>
Local da falha: /pups/lib/pups/exec_command.rb:112:in `spawn’
exec falhou com os parâmetros {“cd”=>“$home”, “hook”=>“db_migrate”, “cmd”=>[“su discourse -c ‘bundle exec rake db:migrate’”]}
f89318158c2c276c69a60d600def8a838ae4ad4bc7bafbe665fb1cd77c130ad1
** FALHA NO BOOTSTRAP ** Por favor, role para cima e procure por mensagens de erro anteriores; pode haver mais de uma.
./discourse-doctor pode ajudar a diagnosticar o problema.

Olá, bem-vindo à comunidade Discourse.

Onde você está instalando, qual sistema operacional? Você está seguindo nosso guia oficial?

Acho que você realmente pode ter mensagens de erro anteriores; parece que seu banco de dados (servidor) pode estar inacessível.

Talvez você deva considerar hospedagem gerenciada assim que seu fórum estiver funcionando novamente…

1 curtida

Olá, Gavin! Obrigado pela resposta rápida. Estamos em um Droplet via Digital Ocean, e quando faço login, aparece:

Welcome to Ubuntu 16.04.6 LTS (GNU/Linux 4.4.0-210-generic x86_64)

Quanto ao uso do seu guia oficial, não posso afirmar. Esta é uma instalação que temos mantido há talvez 3 ou 4 anos sem problemas, embora eu não tenha sido a pessoa que a configurou inicialmente. Geralmente, só exigiu atualizações pelo navegador e, ocasionalmente, reconstruções pela linha de comando, que sempre funcionaram sem praticamente nenhuma outra intervenção da nossa parte até agora.

Tenho toda a saída do terminal da reconstrução salva em um arquivo e posso analisá-la. Mas estamos em um ambiente virtual de Droplet e não alteramos nada desde a configuração inicial. Na verdade, raramente fazemos login, já que o Discourse funciona bem com as atualizações pelo navegador. Então, não sei o que teria mudado para tornar o banco de dados inacessível de repente.

Claro. Este é um caso de algo funcionando bem por anos seguidos, então não há muita pressão para mudarmos. Mas ficaríamos felizes em contratar alguém para analisar ocasionalmente o que temos instalado e garantir que tudo esteja atualizado, em vez de eu fazer isso. Existe algum recurso ou diretório para localizar profissionais de Discourse que possam estar abertos a esse tipo de trabalho?

Obrigado!

Você precisaria verificar a atualização disso. Está antigo. Muito antigo.

Mas vamos primeiro colocar você funcionando. Você pode postar o log de erro? Preciso ver qual é o erro real.

Ok, filtrando avisos e erros na saída da reconstrução, aqui está o que encontrei (abaixo).

227:initdb: aviso: habilitando autenticação “trust” para conexões locais
294:update-alternatives: aviso: forçando reinstalação da alternativa /usr/share/postgresql/13/man/man1/psql.1.gz porque o grupo de links psql.1.gz está quebrado
324:update-alternatives: aviso: forçando reinstalação da alternativa /usr/share/postgresql/13/man/man1/postmaster.1.gz porque o grupo de links postmaster.1.gz está quebrado

1684:createdb: erro: falha na criação do banco de dados: ERRO: banco de dados “discourse” já existe
1811:I, [2021-08-29T20:18:40.246150 #1] INFO – : > cd /var/www/discourse && bash -c “touch -a /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log”
1813:I, [2021-08-29T20:18:40.253584 #1] INFO – : > cd /var/www/discourse && bash -c “ln -s /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log /var/www/discourse/log”
2563:StandardError: Ocorreu um erro; esta e todas as migrações posteriores foram canceladas:
2698:-- add_column(:groups, :imap_last_error, :text)
2961:** FALHA NA INICIALIZAÇÃO ** role para cima e procure por mensagens de erro anteriores; pode haver mais de uma.
3118:createdb: erro: falha na criação do banco de dados: ERRO: banco de dados “discourse” já existe
3245:I, [2021-08-29T20:22:40.262592 #1] INFO – : > cd /var/www/discourse && bash -c “touch -a /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log”
3247:I, [2021-08-29T20:22:40.274767 #1] INFO – : > cd /var/www/discourse && bash -c “ln -s /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log /var/www/discourse/log”
3960:StandardError: Ocorreu um erro; esta e todas as migrações posteriores foram canceladas:
4087:** FALHA NA INICIALIZAÇÃO ** role para cima e procure por mensagens de erro anteriores; pode haver mais de uma.
4224:/erro – procure pela palavra ‘erro’
4358:createdb: erro: falha na criação do banco de dados: ERRO: banco de dados “discourse” já existe
4485:I, [2021-08-29T20:26:59.373901 #1] INFO – : > cd /var/www/discourse && bash -c “touch -a /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log”
4487:I, [2021-08-29T20:26:59.381142 #1] INFO – : > cd /var/www/discourse && bash -c “ln -s /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log /var/www/discourse/log”
5200:StandardError: Ocorreu um erro; esta e todas as migrações posteriores foram canceladas:
5327:** FALHA NA INICIALIZAÇÃO ** role para cima e procure por mensagens de erro anteriores; pode haver mais de uma.

Obrigado novamente por dar uma olhada nisso, Gavin, e desculpe pelas atualizações do sistema operacional negligenciadas.

Acima está apenas o que obtenho ao buscar as palavras “error” e “warning” na saída do script, da qual salvei a totalidade aqui. Se houver mais alguma coisa que eu deva procurar nessa saída, é só me avisar, estou feliz em postar.

Ah, desculpe, percebo que a saída foi um pouco menos explicativa do que o necessário. Aqui estão os detalhes sobre a mensagem “StandardError”. Parece que uma consulta INSERT falhou devido a uma chave duplicada. O conteúdo da consulta foi omitido para melhor legibilidade, mas posso incluí-lo se necessário.

I, [2021-08-29T20:23:37.257772 #1] INFO – : > cd /var/www/discourse && su discourse -c ‘bundle exec rake db:migrate’
2021-08-29 20:23:42.937 UTC [3996] discourse@discourse ERROR: duplicate key value violates unique constraint “data_explorer_queries_pkey”
2021-08-29 20:23:42.937 UTC [3996] discourse@discourse DETAIL: Key (id)=(-2) already exists.
2021-08-29 20:23:42.937 UTC [3996] discourse@discourse STATEMENT: INSERT INTO
[…]
FROM plugin_store_rows
WHERE plugin_name = ‘discourse-data-explorer’ AND type_name = ‘JSON’

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

ERROR: duplicate key value violates unique constraint “data_explorer_queries_pkey”
DETAIL: Key (id)=(-2) already exists.

tente isto

1 curtida

Sim, isso funciona (como você já viu).

Algo deu errado durante a própria atualização.

Apenas publique suas necessidades em #marketplace ou pesquise lá para ver quem responde regularmente.

tudo o que você precisa fazer é, assim que o Discourse estiver de volta ao ar.

  • faça um backup do Discourse.
  • baixe o backup
  • atualize o droplet
  • reconstrua o aplicativo

então você estará pronto para mais alguns anos

Ótimo, obrigado.

Se estou entendendo isso corretamente, parece que há uma tabela de banco de dados usada por um plugin chamado “data explorer” que contém uma linha duplicada, e a exclusão dessa linha duplicada permite que o script de reconstrução prossiga. A partir desse tópico, também parece que esse erro — ou erros semelhantes — já ocorreram antes, e pode ter havido atualizações no Discourse para evitar que isso aconteça no futuro. Ou seja, futuras atualizações que executarmos podem não encontrar esse problema.

Me avise se acha que estou interpretando isso corretamente!

Você está se referindo à atualização do Ubuntu? Se for, entendi.

Correto

Correto novamente :slight_smile:

Sim :smiley:

Ok! Já tenho minhas instruções. Muito obrigado pelo retorno rápido.

1 curtida

Para encerrar este assunto, para qualquer pessoa que encontrar esse erro, parece que tivemos alguns problemas.

Quanto à própria atualização, a linha duplicada no plugin “data_explorer” estava causando um problema e precisava ser removida.

No entanto, como parte disso, também realizamos uma atualização do sistema operacional de Ubuntu 16 para 20, o que causou um erro de rede, deixando o droplet do Digital Ocean inacessível após a reinicialização. Especificamente, parece que, à medida que o sistema operacional migrou para a nova configuração “Netplan”, algo na configuração impedia que o script de inicialização da interface de rede fosse concluído no momento em que foi executado. Assim, o Droplet iniciou, mas não a rede. Ao acessar posteriormente, por meio do console de recuperação no navegador, e executar novamente o script da interface de rede, a interface foi ativada, permitindo que a acessássemos novamente de fora. Desde que não precisemos reiniciar o droplet, estaremos bem até que possamos encontrar tempo para desligar e testar uma correção para a configuração do Netplan.

Sei que isso provavelmente é um caso excepcional, mas lembro de ter lido em algum lugar que atualizações de sistema operacional geralmente não causam problemas. E, embora isso provavelmente seja verdade na maioria das vezes, não foi o caso aqui, e nos manteve offline por cerca de meio dia até que os fusos horários se alinhassem para que nossa equipe técnica contratada pudesse nos colocar de volta no ar.

Portanto, tudo resolvido por enquanto. Obrigado pela rápida resposta de todos.

5 curtidas