Aktualisierung / Neuerstellung von Discourse auf die neueste Version zerstört die Website unwiderruflich

Hallo, wir stecken in letzter Zeit bei einem sehr üblen Fehler fest, der unsere gesamte Website lahmgelegt hat und scheinbar keinen Ausweg bietet. Wir haben alles versucht, von der Neuerstellung bis zum Entfernen/Hinzufügen von Plugins, alles ohne Erfolg. Wir haben ein funktionierendes Backup von vor ein paar Monaten, aber jeder Versuch, dies mit einer neueren Version neu zu erstellen, bricht die Website einfach ab.

Die Hauptmeldung, die angezeigt wird, lautet:

Ups
Die Software, die dieses Diskussionsforum antreibt, ist auf ein unerwartetes Problem gestoßen. Wir entschuldigen uns für die Unannehmlichkeiten.

Detaillierte Informationen über den Fehler wurden protokolliert und eine automatische Benachrichtigung generiert. Wir werden uns darum kümmern.

Es sind keine weiteren Maßnahmen erforderlich. Wenn die Fehlerbedingung jedoch weiterhin besteht, können Sie zusätzliche Details, einschließlich der Schritte zur Reproduktion des Fehlers, bereitstellen, indem Sie ein Diskussionsthema in der Feedback-Kategorie der Website erstellen.

Dies ist eine generische Discourse-Fehlermeldung, die bei der Fehlerbehebung keine tatsächlichen Ergebnisse liefert. Als ich die Protokolle unseres Docker überprüfte, fand ich Folgendes:

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'

Also dachte ich natürlich, ich könnte das Problem beheben, indem ich einfach einen Try/Catch in Zeile 501 implementiere, wo der Fehler auftritt. Dies ist die betreffende Methode:

  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

Während dies die Funktionalität der Website wiederherstellt, geschieht dies leider, indem keine Icons oder Bilder auf der gesamten Website geladen werden, sodass dies letztendlich nichts behebt.

Wir verwenden die folgenden 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

Soweit ich mich erinnere, haben wir einige Plugins wie discourse-follow verwendet, bevor sie offiziell unterstützt wurden, daher hat das Downgrading von ihnen möglicherweise etwas im Prozess kaputt gemacht.

Die ursprüngliche Version vor dem Update war 2.8.0.beta2, wir sind jetzt auf 2.9.0.beta1.

Ich habe so ziemlich alles versucht, was mir einfällt. Ich war mir nicht sicher, ob ich hier posten sollte, weil ich das Gefühl habe, dass dies ein zu generischer Fehler ist, bei dem jemand helfen kann, aber wenn jemand Ideen hat, was dies verursacht, würde ich mich über Hilfe freuen.

1 „Gefällt mir“

Es könnte ein Postgres-Problem sein, bei dem Postgres versucht, von Version 10 auf Version 13 zu aktualisieren.

Überprüfen Sie die Protokolle, ob Sie etwas im Zusammenhang mit Postgres finden.

2 „Gefällt mir“

Beziehen Sie sich auf die Protokolle in /shared/standalone/log/rails? Denn dort wird nichts erwähnt, was mit Postgres zu tun hat. Was die Protokolle in /shared/standalone/log/var-log/postgres betrifft, so gibt es zum Zeitpunkt des Fehlers, 19:51:08 Uhr, eine Anfrage, die nicht ungewöhnlich erscheint. Keine Fehler oder etwas, das fehlschlägt. Und zum Zeitpunkt des Updates, ich glaube nicht, dass das hier protokolliert wird.

Haben Sie etwas Bestimmtes, nach dem ich suchen kann?

Stellen Sie sicher, dass Ihr apt-get update | apt-get upgrade auf dem neuesten Stand ist.
Führen Sie dann ./launcher rebuild app aus.
Prüfen Sie auf Fehler oder schauen Sie in /var/discourse/shared/standalone/log/rails.

1 „Gefällt mir“

Ich habe sowohl apt-get update als auch apt-get upgrade aktualisiert, einen vollständigen Rebuild durchgeführt und werde leider mit denselben Fehlern konfrontiert. Soweit ich das beurteilen kann, hat sich nichts geändert.

1 „Gefällt mir“

Einige Fragen:

  1. Schließt der Wiederaufbau ohne Fehler ab?
  2. Haben Sie versucht, die Website im abgesicherten Modus zu laden?
  3. Können Sie die URL der Website mitteilen, damit wir sie uns ansehen können?
1 „Gefällt mir“
  1. Ja, der Rebuild schließt ohne Fehler ab.
  2. Ja, und ähnlich wie bei der Behebung des oben genannten Fehlers, startet es die Website in einer Art „kein Symbol / Bild“-Modus, in dem nichts geladen wird.
  3. Ja und nein, die Website enthält explizite Inhalte und ich muss herumfragen, ob die Leute damit einverstanden sind, dass ich sie teile.

In der Zwischenzeit habe ich noch etwas herausgefunden: Beim Durchsuchen der Website im Safe Mode habe ich festgestellt, dass DiscoTOC einen Fehler auslöst. Nach dem Deaktivieren funktioniert die Website wieder normal, ohne dass der Safe Mode benötigt wird. Die Symbole/Bilder werden jedoch immer noch nicht richtig geladen.

Alle Bilder lösen 404er in der Konsole aus, die meisten Symbole wie das Favicon lösen 500er aus.
Natürlich funktionierten sie alle vorher einwandfrei.

Um dem hinzuzufügen, könnte es sein, dass der Wiederaufbau die Datenbank aller Bildreferenzen irgendwie gelöscht hat?

Um alle auf dem Laufenden zu halten, habe ich inzwischen mehrere Vorschläge aus verschiedenen Threads ausprobiert, aber um nur zwei zu nennen:

Keiner der Vorschläge hat geholfen. rake posts:rebake, rake posts:missing_uploads und rake uploads:recover_from_tombstone haben leider alle nicht funktioniert. Ich habe auch das sidekiq-Dashboard überprüft, aber das stellt auch nichts wieder her.

Ich wäre dankbar, wenn mir jemand eine Idee geben könnte, wie ich die jetzt fehlenden Bilder wiederherstellen kann.

Nach viel Herumprobieren konnte ich die Bilder doch noch erfolgreich wiederherstellen, daher betrachte ich dieses Problem als gelöst.

1 „Gefällt mir“

Gab es etwas, das Sie gerne von Anfang an gewusst hätten?

3 „Gefällt mir“

Vielleicht hätte ein gründlicherer Blick auf die Website im abgesicherten Modus von Anfang an geholfen. Ich muss auch zugeben, dass ich nur an der Wiederherstellung der Website beteiligt war, nachdem bereits einige Arbeiten daran durchgeführt worden waren. Es stellte sich heraus, dass die Bilder in einem separaten gesicherten Ordner waren und nur verschoben werden mussten.

4 „Gefällt mir“

Das konnte ja niemand erraten! Gut, dass du es herausgefunden hast.

1 „Gefällt mir“

Dieses Thema wurde 30 Tage nach der letzten Antwort automatisch geschlossen. Neue Antworten sind nicht mehr möglich.