Aggiornamento / Ricostruzione di Discourse all'ultima versione rompe irrimediabilmente il sito web

Ciao, siamo bloccati da un bug molto fastidioso che ha mandato in crash il nostro intero sito web senza una via d’uscita apparentemente praticabile. Abbiamo provato di tutto, dalla ricostruzione alla rimozione/aggiunta di plugin, senza successo. Abbiamo un backup funzionante di un paio di mesi fa, ma sembra che qualsiasi tentativo di ricostruzione con una versione più recente rompa semplicemente il sito.

Il messaggio principale visualizzato recita:

Oops
Il software che alimenta questo forum di discussione ha riscontrato un problema imprevisto. Ci scusiamo per l'inconveniente.

Informazioni dettagliate sull'errore sono state registrate e generata una notifica automatica. Ci daremo un'occhiata.

Non è necessaria alcuna ulteriore azione. Tuttavia, se la condizione di errore persiste, è possibile fornire ulteriori dettagli, inclusi i passaggi per riprodurre l'errore, pubblicando un argomento di discussione nella categoria di feedback del sito.

Questo è un messaggio di errore generico di Discourse che non produce risultati effettivi durante la risoluzione dei problemi. Controllando i log del nostro docker, sono riuscito a trovare questo:

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'

Quindi, naturalmente, ho pensato di poter risolvere il problema implementando un try/catch alla riga 501 dove si verifica l’errore. Questo è il metodo in questione:

  def self.custom_icons(theme_id)
    # Registra automaticamente le icone negli sprite aggiunti tramite temi o plugin
    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

Mentre questo ripristina la funzionalità del sito, sfortunatamente lo fa non caricando alcuna icona o immagine sull’intero sito web, quindi in definitiva questo non risolve nulla.

Stiamo utilizzando i seguenti plugin:

          - 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

Per quanto ricordo, abbiamo utilizzato alcuni plugin come discourse-follow prima che fossero ufficialmente supportati, quindi forse il downgrade di questi ha rotto qualcosa nel processo.

La versione originale prima dell’aggiornamento era 2.8.0.beta2, ora siamo alla 2.9.0.beta1.

Ho provato quasi tutto ciò che mi viene in mente, non ero sicuro se postare qui perché sento che questo è un bug troppo generico per chiunque possa aiutare, ma se qualcuno ha idee su cosa stia causando questo, apprezzerei l’assistenza.

1 Mi Piace

Potrebbe esserci un problema con Postgres, dove Postgres sta tentando di eseguire l’aggiornamento dalla versione 10 alla versione 13.

Controlla i log per vedere se vedi qualcosa relativo a Postgres.

2 Mi Piace

Ti riferisci ai log contenuti in /shared/standalone/log/rails? Perché non menzionano nulla relativo a postgres. Per quanto riguarda i log contenuti in /shared/standalone/log/var-log/postgres, all’incirca al momento dell’errore, 19:51:08, c’è una richiesta che non sembra fuori dall’ordinario. Nessun errore o qualcosa che sembri fallire. E all’incirca al momento dell’aggiornamento, non credo che venga registrato qui.

Hai qualcosa in particolare che posso cercare?

assicurati che il tuo apt-get update | apt-get upgrade sia aggiornato
e poi esegui ./launcher rebuild app

controlla la presenza di errori o guarda in /var/discourse/shared/standalone/log/rails

1 Mi Piace

Ho aggiornato sia apt-get update che apt-get upgrade, ho eseguito una ricostruzione completa e purtroppo mi ritrovo con gli stessi identici errori. Per quanto posso vedere, non è cambiato nulla.

1 Mi Piace

Alcune domande:

  1. La ricompilazione è stata completata senza errori?
  2. Hai provato a caricare il sito in modalità provvisoria?
  3. Puoi condividere l’URL del sito in modo che possiamo dare un’occhiata?
1 Mi Piace
  1. Sì, la ricompilazione si completa senza errori.
  2. Sì, e proprio come quando correggo l’errore menzionato sopra, avvia il sito web in una sorta di modalità “senza icone/immagini” in cui nulla viene caricato.
  3. Sì e no, il sito contiene contenuti espliciti e dovrò chiedere in giro se le persone sono a loro agio nel farmelo condividere.

Nel frattempo, ho scoperto qualcos’altro: durante la navigazione del sito web in modalità provvisoria, ho notato che DiscoTOC genera un errore. Disattivandolo, il sito web funziona normalmente di nuovo senza la necessità della modalità provvisoria, tuttavia le icone/immagini continuano a non caricarsi correttamente.

Tutte le immagini generano 404 nella console, la maggior parte delle icone come il favicon generano 500.
Naturalmente, prima funzionavano tutte bene.

Per aggiungere a questo, potrebbe essere che la ricostruzione abbia in qualche modo cancellato tutti i riferimenti alle immagini dal database?

Per tenere tutti aggiornati, ho provato diversi suggerimenti da diversi thread, ma per citarne solo due:

Nessuno dei suggerimenti ha aiutato, rake posts:rebake, rake posts:missing_uploads e rake uploads:recover_from_tombstone non hanno funzionato, purtroppo. Ho anche controllato la dashboard di sidekiq, ma nemmeno quella sta ripristinando nulla.

A chiunque abbia un’idea su come ripristinare le immagini ora mancanti, sarei grato di sentirla.

Dopo molti tentativi ed errori, sono riuscito a ripristinare con successo le immagini, quindi considererò questo problema risolto.

1 Mi Piace

C’era qualcosa che avresti voluto sapere all’inizio?

3 Mi Piace

Forse dare un’occhiata più approfondita al sito web in modalità provvisoria fin dall’inizio avrebbe aiutato. Devo anche ammettere che sono stato coinvolto nel ripristino del sito solo dopo che era già stato fatto del lavoro, si è scoperto che le immagini erano in una cartella di backup separata e dovevano solo essere spostate.

4 Mi Piace

Difficile da indovinare per chiunque! Sono contento che tu l’abbia capito.

1 Mi Piace

Questo argomento è stato chiuso automaticamente 30 giorni dopo l’ultima risposta. Non sono più consentite nuove risposte.