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.
