Frontend auf Prod-Website ausgefallen -- Ember/Test-Fehler

Meine Discourse-Instanz im Frontend ist komplett leer und lädt nach dem neuen Upgrade nicht. Das ist keine gute Sache, und ich bin ein wenig in Panik, da die Benutzer unzufrieden sind. Das Backend scheint in Ordnung zu sein.

Dies geschah nach dem neuesten Upgrade heute, auf einem Digital Ocean Droplet, das einen Container ausführt. Ich habe den Launcher verwendet, um die App neu zu erstellen.

Jede Hilfe wird sehr geschätzt.

Die Konsolenfehlermeldung lautet:

app.js:31 
Uncaught TypeError: Cannot read properties of undefined (reading 'registerAsyncHelper')    at s.callback (vendor-suffix.js:58:1)
    at s.exports (loader.js:106:1)
    at s._reify (loader.js:143:1)
    at s.reify (loader.js:130:1)
    at s.exports (loader.js:104:1)
    at s._reify (loader.js:143:1)
    at s.reify (loader.js:130:1)
    at s.exports (loader.js:104:1)
    at s._reify (loader.js:143:1)
    at s.reify (loader.js:130:1)
    at s.exports (loader.js:104:1)
    at requireModule (loader.js:27:1)
    at n._prepareInitializer (app.js:24:1)
    at app.js:81:1
    at Array.forEach (<anonymous>)
    at n.start (app.js:73:1)
    at HTMLDocument.<anonymous> (start-app.js:4:1)
    at discourse-boot.js:30:1
    at discourse-boot.js:31:1
3 „Gefällt mir“

Die gesamte HTML wird einwandfrei geladen, aber etwas mit der Ember-App funktioniert nicht…

Wenn ich mir den Code ansehe, wo er abstürzt, scheint Ember.Application.extend aus irgendeinem Grund einen Fehler auszulösen.

  var Discourse = Ember.Application.extend({
    rootElement: "#main",
    customEvents: {
      paste: "paste"
    },
    Resolver: (0, _resolver.buildResolver)("discourse"),
    _prepareInitializer: function _prepareInitializer(moduleName) {
      var themeId = moduleThemeId(moduleName);
      var module = null;

      try {
        module = requirejs(moduleName, null, null, true);

        if (!module) {
          throw new Error(moduleName + " muss einen Initialisierer exportieren.");
        }
      } catch (error) {
        if (!themeId || (0, _environment.isTesting)()) {
          throw error;
        }

Der Schuldige scheint diese Bedingung zu sein: !themeId || (0, _environment.isTesting)()

1 „Gefällt mir“

Ugh…es war ein Plugin…ich weiß nicht, welches es ist, aber nach einigem Herumgraben hier vermutete ich, dass dies ein Problem gewesen sein könnte…entfernte cakeday, signatures, data explorer, discourse-video-upload und encryption. Ich werde sie zu einem späteren Zeitpunkt einzeln einführen und sehen, ob ich den Schuldigen ausfindig machen kann. Aber vorerst ist die App wieder online und ich fasse sie nicht an.

Schreckliche Erfahrung. Ich fühle mich gerade ziemlich schuldig… Ich hätte in Zukunft wahrscheinlich einen Staging-Klon-Prozess für diese Upgrades haben sollen. Lektion gelernt. Oder zumindest werde ich vor jedem Upgrade einen Snapshot erstellen, damit ich im Fehlerfall wiederherstellen kann.

3 „Gefällt mir“

Das Problem ist Discourse encrypt. Sie können es beheben, indem Sie es am Ende Ihrer yml-Datei platzieren und den Commit auswählen, bevor es zum ersten Mal kaputt ging (die Signaturprüfung war neulich kaputt), wie hier gezeigt:

  - git clone https://github.com/discourse/docker-manager.git
  ... dann Ihre anderen Plugins ...
  - git clone https://github.com/discourse/discourse-encrypt.git
  - cd discourse-encrypt && git checkout 12639de

Wie Sie sehen können, habe ich das Discourse encrypt Plugin zuletzt platziert, nur für den Fall, dass die cd- und git checkout-Befehle nachfolgende Befehle beeinflussen würden (was ich nicht glaube).

Und ja, das ist der Commit-Hash der letzten Version, die definitiv in Ordnung funktioniert.

Meine Website funktioniert jetzt wieder einwandfrei. Und Discourse Encrypt hat wieder die grünen Häkchen.

6 „Gefällt mir“

@TomSSL danke für diese Aufschlüsselung des Problems

@sam Ich werde morgen eine Bewerbung für die Stelle als Full Stack Engineer einreichen. Da ich defekte Plugins jage, werde ich versuchen, dem Team beizutreten und an Plugins zu arbeiten :slight_smile:

Ich würde dir eine Direktnachricht senden, aber diese Instanz lässt es nicht zu.

3 „Gefällt mir“

Siehe Current Openings | Discourse - Civilized Discussion :slight_smile:

1 „Gefällt mir“

Bitte belassen Sie diese Konfiguration nicht zu lange – Ihre Instanz erhält keine zukünftigen Updates für das Encrypt-Plugin. Das wird höchstwahrscheinlich dazu führen, dass Dinge in Zukunft kaputt gehen.

Wir sind uns des Problems mit der Signaturprüfung bewusst, und arbeiten an einer Lösung und haben eine Lösung veröffentlicht.

Dieser Ember.Test-Fehler ist jedoch unerwartet. @Mycobee, können Sie bestätigen, welche Version von Discourse Sie verwenden? Wie haben Sie das Update durchgeführt? Über die Benutzeroberfläche /admin/upgrade?

4 „Gefällt mir“

Ja, das ist äußerst wichtig und ich habe vergessen, es zu erwähnen (es war fast 4 Uhr morgens meiner Zeit, als ich das schrieb, und ich hatte gerade alles wieder zum Laufen gebracht und dachte, ich schaue hier nach, ob jemand anderes das gleiche Problem hatte). Dies ist nur eine vorübergehende Lösung, um die Dinge wieder zum Laufen zu bringen. Danke für die Erinnerung @david.

Diese Lösung hat bei mir nicht funktioniert, als ich heute Morgen um 00:00 UTC alles aktualisiert habe (vor zehn Stunden und dreißig Minuten). Ich habe meine Instanz erst dann aktualisiert, als ich sah, dass die Signaturüberprüfung behoben worden war. Dann musste ich die oben beschriebene temporäre Lösung anwenden. Ist es denkbar, dass mein übliches Update aus irgendeinem Grund den neuesten Code nicht übernommen hat?

2 „Gefällt mir“

Haben Sie immer noch das Problem mit der Signaturüberprüfung :x: gesehen? Oder sind Sie auf das Ember.Test-Problem gestoßen?

Außerdem habe ich mich gerade mit dem Team abgestimmt, und es scheint, dass wir das Ember.Test-Problem identifiziert haben und sehr bald eine Lösung haben werden. Wir werden hier aktualisieren, sobald es verfügbar ist.

2 „Gefällt mir“

Ich erhielt eine leere Titelseite und musste alle Plugins (im abgesicherten Modus) deaktivieren, damit die Seite überhaupt geladen werden konnte. Ich führe wöchentliche Updates montags gegen 9:00 UTC durch und dies war ein zusätzliches Update, um das Problem mit der Signaturüberprüfung zu beheben. Allerdings wurden dabei natürlich auch eine ganze Reihe anderer Änderungen übernommen. Und die Version wurde in diesem Zeitraum ebenfalls auf 2.9.0beta3 hochgestuft.

Wie Sie bereits gesehen haben (aber vielleicht noch nicht alle), hier ist der Diff für Discourse Encrypt zwischen der Version, die ich jetzt laufen habe, und der neuesten Version zum Zeitpunkt dieser Nachricht.

Außerdem hat es bis fast 4 Uhr morgens gedauert, bis es behoben war. Kurz vor 2 Uhr war alles in Ordnung, aber dann musste ich den Leuten erzählen, was passiert war (die meisten unserer Benutzer sind in den USA).

2 „Gefällt mir“

Dieses Problem sollte durch diesen Commit im Discourse-Kern behoben werden:

Sobald Sie Discourse auf die neueste Version aktualisiert haben, sollte es sicher sein, discourse-encrypt auf die neueste Version zu aktualisieren.

5 „Gefällt mir“

Das hat tatsächlich funktioniert, das Upgrade verläuft jetzt ohne Probleme.

3 „Gefällt mir“

@david Ich habe auf 2.9.0.beta3 aktualisiert, was das Problem verursacht hat.

Bezüglich des Update-Prozesses führe ich dies normalerweise über die /admin/upgrade-Benutzeroberfläche durch. Dieser Fall war anders.

Ich habe nur docker-manager über die Upgrade-Benutzeroberfläche aktualisiert. Danach musste ich mich um andere Dinge kümmern und bin ein paar Stunden später zum Pfad /admin/upgrade zurückgekehrt, um den Update-Prozess abzuschließen.

Ich wurde mit einer Textseite begrüßt, die mich aufforderte, zum Host zu gehen, in das Verzeichnis /var/discourse zu wechseln, git pull auszuführen und die App mit ./launcher neu zu erstellen… Das habe ich getan, und dann brach das Chaos aus.

Obwohl Stress und Nerven hochkochten, fand ich in diesem Forum etwas darüber, dass uncaught TypeError mit einem Plugin zusammenhängt, also habe ich alles Unwesentliche aus den app.yml-Plugins entfernt und den Container neu erstellt. Zu diesem Zeitpunkt funktionierte die Ember-App wieder.

1 „Gefällt mir“

Dieses Thema wurde nach 2 Tagen automatisch geschlossen. Neue Antworten sind nicht mehr möglich.