Frontend sul sito di produzione inattivo -- Errore Ember/Test

Il frontend della mia istanza di discourse è completamente vuoto e non si carica dopo il nuovo aggiornamento. Non è una buona cosa e sono un po’ nel panico perché gli utenti sono insoddisfatti. Il backend sembra essere attivo.

Questo è successo dopo l’ultimo aggiornamento di oggi, su una droplet di Digital Ocean che esegue un container. Ho usato launcher per ricostruire l’app.

Qualsiasi aiuto è molto apprezzato.

L’errore della console dice:

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 Mi Piace

Tutto l’HTML viene caricato correttamente, ma qualcosa con l’app Ember non funziona…

Guardando il codice dove si verifica l’errore, sembra che Ember.Application.extend stia generando un errore per qualche motivo

  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 + " must export an initializer.");
        }
      } catch (error) {
        if (!themeId || (0, _environment.isTesting)()) {
          throw error;
        }

Il colpevole sembra essere questa condizione: !themeId || (0, _environment.isTesting)()

1 Mi Piace

Ugh… era un plugin… non sono sicuro di quale fosse, ma dopo aver scavato un po’ qui ho sospettato che potesse essere un problema… ho rimosso cakeday, signatures, data explorer, discourse-video-upload e encryption. Li introdurrò uno alla volta in un secondo momento e vedrò se riesco a individuare il colpevole. Ma per ora, l’app è di nuovo attiva e non la tocco

Esperienza terribile. Mi sento piuttosto in colpa in questo momento… dovrei probabilmente avere un processo di clonazione di staging per questi aggiornamenti in futuro. Lezione imparata. O almeno farò sempre uno snapshot prima dell’aggiornamento in modo da poter ripristinare in caso di errore.

3 Mi Piace

Il problema è Discourse encrypt. Puoi risolverlo mettendolo per ultimo nel tuo file yml e selezionando il commit da prima che venisse rotto per la prima volta (la verifica della firma si è rotta l’altro giorno), in questo modo:

  - git clone https://github.com/discourse/docker-manager.git
  ... poi i tuoi altri plugin ...
  - git clone https://github.com/discourse/discourse-encrypt.git
  - cd discourse-encrypt && git checkout 12639de

Come puoi vedere, ho messo l’ultimo plugin Discourse encrypt, nel caso in cui i comandi cd e git checkout influenzassero i comandi successivi (cosa che non credo farebbero).

E sì, questo è l’hash del commit dell’ultima versione che funziona sicuramente bene.

Il mio sito ora funziona di nuovo correttamente. E Discourse Encrypt ha di nuovo le spunte verdi.

6 Mi Piace

@TomSSL grazie per questa analisi del problema

@sam Domani presenterò una candidatura per la posizione di Full Stack Engineer. Visto che sto inseguendo plugin non funzionanti, proverò a unirmi al team e a lavorare sui plugin :slight_smile:

Ti manderei un messaggio privato, ma questa istanza non me lo permette.

3 Mi Piace

Vedi Current Openings | Discourse - Civilized Discussion :slight_smile:

1 Mi Piace

Per favore, non lasciare questa configurazione attiva per molto tempo: la tua istanza non riceverà futuri aggiornamenti del plugin Encrypt. Ciò causerà molto probabilmente problemi in futuro.

Siamo a conoscenza del problema di verifica della firma, e stiamo lavorando a una soluzione e abbiamo rilasciato una soluzione.

Tuttavia, questo errore Ember.Test è inaspettato. @Mycobee puoi confermare quale versione di Discourse stai eseguendo? Come hai eseguito l’aggiornamento? Tramite l’interfaccia utente /admin/upgrade?

4 Mi Piace

Sì, questo è di vitale importanza e ho dimenticato di menzionarlo (erano quasi le 4 del mattino per me quando l’ho scritto e avevo appena ripristinato il funzionamento e ho pensato di controllare qui per vedere se qualcun altro aveva lo stesso problema). Questa è solo una soluzione temporanea per ripristinare il funzionamento. Grazie per il promemoria @david.

Quella soluzione non ha funzionato per me quando ho aggiornato tutto alle 00:00 UTC di stamattina (dieci ore e mezza fa). Ho aggiornato la mia istanza solo allora perché ho visto che la verifica della firma era stata corretta. Poi ho dovuto applicare la soluzione temporanea descritta sopra. È possibile che il mio solito aggiornamento non abbia rilevato il codice più recente per qualche motivo?

2 Mi Piace

Stavi ancora riscontrando il problema di verifica della firma :x:? O hai riscontrato il problema Ember.Test?

Inoltre, ho appena parlato con il team e sembra che abbiamo identificato il problema Ember.Test e avremo presto una soluzione. Aggiorneremo qui quando sarà disponibile.

2 Mi Piace

La pagina principale era vuota e ho dovuto disabilitare tutti i plugin (in modalità provvisoria) per far caricare il sito. Eseguo aggiornamenti settimanali il lunedì intorno alle 9:00 UTC e questo è stato un aggiornamento aggiuntivo per risolvere il problema della verifica della firma. Tuttavia… ci sono state anche molte altre modifiche, ovviamente. E la versione è stata aggiornata a 2.9.0beta3 in quel periodo.

Come avrai già visto (ma forse qualcuno non l’ha visto), ecco il diff per Discourse Encrypt tra la versione che sto eseguendo ora e l’ultima versione al momento di questo messaggio.

Inoltre, non ci è voluto quasi fino alle 4 del mattino per risolvere il problema. Era tutto a posto poco prima delle 2 del mattino, ma poi ho dovuto dire alle persone cosa era successo (la maggior parte dei nostri utenti si trova negli Stati Uniti).

2 Mi Piace

Questo problema dovrebbe essere risolto da questo commit nel core di Discourse:

Quindi, una volta aggiornato Discourse all’ultima versione, dovrebbe essere sicuro aggiornare discourse-encrypt all’ultima versione.

5 Mi Piace

Ha funzionato davvero, l’aggiornamento ora procede senza problemi.

3 Mi Piace

@david Mi sono aggiornato alla versione 2.9.0.beta3, che ha causato il problema.

Per quanto riguarda il processo di aggiornamento, di solito lo faccio tramite l’interfaccia utente /admin/upgrade. Questo caso è stato diverso.

Ho aggiornato solo docker-manager dall’interfaccia di aggiornamento. Dopo di che, ho dovuto occuparmi di altre cose e sono tornato al percorso /admin/upgrade qualche ora dopo per completare il processo di aggiornamento.

Mi sono trovato di fronte a una pagina di testo che mi diceva di andare sull’host, cambiare nella directory /var/discourse, fare git pull e ricostruire l’app con ./launcher… Quindi è quello che ho fatto, e poi è iniziato il caos.

Mentre lo stress e i nervi erano alti, ho trovato qualcosa su questo forum riguardo a TypeError non gestiti correlati a un plugin, quindi ho rimosso tutto ciò che non era essenziale dai plugin di app.yml e ho ricostruito il container. A quel punto, l’app Ember ha ricominciato a funzionare.

1 Mi Piace

Questo argomento è stato chiuso automaticamente dopo 2 giorni. Non sono più consentite nuove risposte.