Atualizando / Reconstruindo Discourse para a versão mais recente quebra irreversivelmente o site

Olá, temos enfrentado um bug muito desagradável ultimamente que quebrou todo o nosso site, sem uma saída aparentemente viável. Tentamos de tudo, desde reconstruir até remover/adicionar plugins, sem sucesso. Temos um backup funcional de alguns meses atrás, mas parece que qualquer tentativa de reconstruir isso com uma versão mais recente simplesmente quebra o site.

A mensagem principal exibida diz:

Oops
O software que alimenta este fórum de discussão encontrou um problema inesperado. Pedimos desculpas pelo inconveniente.

Informações detalhadas sobre o erro foram registradas e uma notificação automática gerada. Daremos uma olhada.

Nenhuma ação adicional é necessária. No entanto, se a condição de erro persistir, você pode fornecer detalhes adicionais, incluindo os passos para reproduzir o erro, postando um tópico de discussão na categoria de feedback do site.

Esta é uma mensagem de erro genérica do Discourse que não produz resultados reais ao solucionar problemas. Verificando os logs do nosso docker, consegui encontrar isto:

Completed 500 Internal Server Error in 152ms (ActiveRecord: 0.0ms | Allocations: 17980)
ActionView::Template::Error (undefined method `[]' for nil:NilClass)
lib/svg_sprite/svg_sprite.rb:502:in `block in custom_icons'
lib/svg_sprite/svg_sprite.rb:500:in `each'
lib/svg_sprite/svg_sprite.rb:500:in `custom_icons'
lib/svg_sprite/svg_sprite.rb:275:in `block in all_icons'
lib/distributed_cache.rb:25:in `defer_get_set'
lib/svg_sprite/svg_sprite.rb:517:in `get_set_cache'
lib/svg_sprite/svg_sprite.rb:268:in `all_icons'
lib/svg_sprite/svg_sprite.rb:337:in `bundle'
lib/svg_sprite/svg_sprite.rb:285:in `block in version'
lib/distributed_cache.rb:25:in `defer_get_set'
lib/svg_sprite/svg_sprite.rb:517:in `get_set_cache'
lib/svg_sprite/svg_sprite.rb:284:in `version'
lib/svg_sprite/svg_sprite.rb:290:in `path'
app/helpers/application_helper.rb:586:in `client_side_setup_data'
app/views/layouts/application.html.erb:61
lib/topic_list_responder.rb:13:in `block (2 levels) in respond_with_list'
lib/topic_list_responder.rb:9:in `respond_with_list'
app/controllers/list_controller.rb:103:in `block (2 levels) in <class:ListController>'
app/controllers/application_controller.rb:387:in `block in with_resolved_locale'
app/controllers/application_controller.rb:387:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:71:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:356:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
lib/middleware/enforce_hostname.rb:23:in `call'
lib/middleware/request_tracker.rb:198:in `call'

Então, naturalmente, pensei que poderia corrigir o problema simplesmente implementando um try/catch na linha 501, onde ocorre o erro. Este é o método em questão:

  def self.custom_icons(theme_id)
    # Automatically register icons in sprites added via themes or plugins
    icons = []
    custom_svg_sprites(theme_id).each do |item|
      begin
        svg_file = Nokogiri::XML(item[:sprite])
        svg_file.css('symbol').each do |sym|
          icons << sym.attributes['id'].value if sym.attributes['id'].present?
        end
      rescue Exception => e
        puts e
      end
    end
    icons
  end

Embora isso restaure a funcionalidade do site, infelizmente o faz sem carregar nenhum ícone ou imagem em todo o site, então, em última análise, isso não resolve nada.

Estamos usando os seguintes plugins:

          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/discourse-bbcode.git
          - git clone https://github.com/discourse/discourse-follow.git
          - git clone https://github.com/discourse/discourse-user-notes.git

Pelo que me lembro, usamos alguns plugins como o discourse-follow antes de serem oficialmente suportados, então talvez o downgrade deles tenha quebrado algo no processo.

A versão original antes da atualização era 2.8.0.beta2, agora estamos na 2.9.0.beta1.

Tentei praticamente tudo que consigo pensar, não tinha certeza se deveria postar aqui porque sinto que este é um bug muito genérico para alguém conseguir ajudar, mas se alguém tiver alguma ideia do que está causando isso, agradeceria a ajuda.

1 curtida

Pode haver um problema com o Postgres, onde ele está tentando fazer o upgrade da versão 10 para a 13.

Verifique os logs para ver se encontra algo relacionado ao Postgres.

2 curtidas

Você está se referindo aos logs contidos em /shared/standalone/log/rails? Porque eles não mencionam nada relacionado ao postgres. Quanto aos logs contidos em /shared/standalone/log/var-log/postgres, por volta da hora do erro, 19:51:08, há uma solicitação que não parece fora do comum. Nenhum erro ou algo que pareça falhar. E por volta da hora da atualização, acho que isso não é registrado aqui.

Você tem algo em particular que eu possa procurar?

certifique-se de que seu apt-get update | apt-get upgrade esteja atualizado
e então execute ./launcher rebuild app

verifique se há erros ou procure em /var/discourse/shared/standalone/log/rails

1 curtida

Atualizei tanto o apt-get update quanto o apt-get upgrade, fiz uma reconstrução completa e, infelizmente, me deparo com os mesmos erros. Pelo que pude ver, nada mudou.

1 curtida

Algumas perguntas:

  1. A reconstrução é concluída sem erros?
  2. Você tentou carregar o site em modo de segurança?
  3. Você pode compartilhar o URL do site para que possamos dar uma olhada?
1 curtida
  1. Sim, a reconstrução é concluída sem erros.
  2. Sim, e de forma semelhante a quando corrijo o erro mencionado acima, ele inicia o site em uma espécie de modo “sem ícones / imagens” onde nada carrega.
  3. Sim e não, o site contém conteúdo explícito e terei que perguntar se as pessoas se sentem confortáveis para que eu o compartilhe.

Enquanto isso, descobri outra coisa: ao navegar no site em modo de segurança, notei que o DiscoTOC gera um erro. Ao desativá-lo, o site volta a funcionar normalmente sem a necessidade de modo de segurança, no entanto, os ícones/imagens ainda não carregam corretamente.

Todas as imagens estão gerando 404 no console, a maioria dos ícones como o favicon está gerando 500.
Naturalmente, todos eles estavam funcionando bem antes.

Para complementar, será que a reconstrução limpou de alguma forma o banco de dados de todas as referências de imagem?

Para manter todos atualizados, desde então experimentei várias sugestões de diferentes tópicos, mas apenas para citar duas:

Nenhuma das sugestões ajudou, rake posts:rebake, rake posts:missing_uploads e rake uploads:recover_from_tombstone não funcionaram, infelizmente. Também verifiquei o painel do sidekiq, mas isso também não está restaurando nada.

Para quem tiver alguma ideia de como restaurar as imagens agora ausentes, ficaria grato em ouvi-las.

Depois de muita tentativa e erro, consegui restaurar as imagens com sucesso, então considerarei este problema resolvido.

1 curtida

Havia algo que você gostaria de saber no início?

3 curtidas

Talvez dar uma olhada mais completa no site em modo de segurança desde o início teria ajudado. Tenho que admitir também que só fui envolvido na restauração do site depois que algum trabalho já havia sido feito nele, e descobri que as imagens estavam em uma pasta separada de backup e só precisavam ser movidas.

4 curtidas

Difícil para qualquer um adivinhar isso! Que bom que você descobriu.

1 curtida

Este tópico foi fechado automaticamente 30 dias após a última resposta. Novas respostas não são mais permitidas.