Frontend du site de production en panne -- Erreur Ember/Test

Le frontend de mon instance Discourse est complètement vide et ne se charge pas après la nouvelle mise à niveau. Ce n’est pas une bonne chose, et je suis un peu paniqué car les utilisateurs ne sont pas contents. Le backend semble être opérationnel.

Cela s’est produit après la dernière mise à niveau aujourd’hui, sur une instance Digital Ocean exécutant un conteneur. J’ai utilisé launcher pour reconstruire l’application.

Toute aide est grandement appréciée.

L’erreur de la console indique :

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 « J'aime »

Tout le HTML se charge correctement, mais quelque chose avec l’application Ember ne fonctionne pas…

En regardant le code où ça plante, il semble que Ember.Application.extend lance une erreur pour une raison quelconque

  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;
        }

Le coupable semble être cette condition : !themeId || (0, _environment.isTesting)()

1 « J'aime »

Ouf… c’était un plugin… je ne sais pas lequel, mais après quelques recherches ici, j’ai suspecté que cela pouvait être un problème… j’ai supprimé cakeday, signatures, data explorer, discourse-video-upload et encryption. Je vais les réintroduire un par un plus tard et voir si je peux identifier le coupable. Mais pour l’instant, l’application est de nouveau opérationnelle et je n’y touche plus.

Expérience terrible. Je me sens assez coupable en ce moment… je devrais probablement avoir un processus de clonage de staging pour ces mises à niveau à l’avenir. Leçon apprise. Ou du moins, je prendrai toujours un instantané avant la mise à niveau afin de pouvoir restaurer en cas d’échec.

3 « J'aime »

Le problème est Discourse encrypt. Vous pouvez le résoudre en le plaçant en dernier dans votre fichier yml et en sélectionnant le commit d’avant qu’il ne soit cassé pour la première fois (la vérification de signature a été cassée l’autre jour), comme ceci :

  - git clone https://github.com/discourse/docker-manager.git
  ... puis vos autres plugins ...
  - git clone https://github.com/discourse/discourse-encrypt.git
  - cd discourse-encrypt && git checkout 12639de

Comme vous pouvez le voir, j’ai mis le plugin Discourse encrypt en dernier, au cas où les commandes cd et git checkout affecteraient les commandes suivantes (ce qui, je ne pense pas, serait le cas).

Et oui, c’est bien le hash du commit de la dernière version qui fonctionne définitivement.

Mon site fonctionne maintenant à nouveau correctement. Et Discourse Encrypt a à nouveau les coches vertes.

6 « J'aime »

@TomSSL merci pour cette analyse du problème

@sam Je vais postuler demain pour le poste d’ingénieur Full Stack. Je me suis dit que pendant que je chasse les plugins cassés, je vais essayer de rejoindre l’équipe et de travailler sur les plugins :slight_smile:

Je t’enverrais bien un message privé, mais cette instance ne me le permet pas.

3 « J'aime »

Voir Current Openings | Discourse - Civilized Discussion :slight_smile:

1 « J'aime »

Veuillez ne pas laisser cette configuration en place trop longtemps - votre instance ne recevra pas les futures mises à jour du plugin Encrypt. Cela causera très probablement des problèmes à l’avenir.

Nous sommes au courant du problème de vérification de signature, et travaillons sur un correctif et avons poussé un correctif.

Cependant, cette erreur Ember.Test est inattendue. @Mycobee pouvez-vous confirmer la version de Discourse que vous utilisez ? Comment avez-vous effectué la mise à jour ? Via l’interface utilisateur /admin/upgrade ?

4 « J'aime »

Oui, c’est d’une importance capitale et j’ai oublié de le mentionner (il était près de 4h du matin pour moi quand j’ai écrit ceci et je venais de faire en sorte que les choses fonctionnent à nouveau et j’ai pensé à regarder ici pour voir si quelqu’un d’autre avait le même problème). Ceci n’est qu’une solution temporaire pour que les choses fonctionnent à nouveau. Merci pour le rappel @david.

Cette solution n’a pas fonctionné pour moi lorsque j’ai mis à jour tout à 00h00 UTC ce matin (il y a dix heures et demie). Je n’ai mis à jour mon instance qu’alors parce que j’ai vu que la vérification de signature avait été corrigée. Ensuite, j’ai dû appliquer la solution temporaire décrite ci-dessus. Est-il possible que ma mise à jour habituelle n’ait pas récupéré le dernier code pour une raison quelconque ?

2 « J'aime »

Vous rencontriez toujours le problème de vérification de signature :x: ? Ou avez-vous rencontré le problème Ember.Test ?

De plus, je viens de vérifier avec l’équipe, et il semble que nous ayons identifié le problème Ember.Test, et nous aurons un correctif très bientôt. Nous mettrons à jour ici lorsqu’il sera disponible.

2 « J'aime »

J’avais une page d’accueil vierge et j’ai dû désactiver tous les plugins (en mode sans échec) pour que le site se charge. Je fais des mises à jour hebdomadaires vers 9h00 UTC le lundi et il s’agissait d’une mise à jour supplémentaire pour résoudre le problème de vérification de signature. Cependant… il y a eu pas mal d’autres changements détectés, bien sûr. Et la version est passée à 2.9.0beta3 pendant cette période également.

Comme vous l’aurez déjà vu (mais peut-être que certains ne l’ont pas vu), voici le diff pour Discourse Encrypt entre la version que j’utilise actuellement et la dernière version au moment de ce message.

De plus, cela n’a pas vraiment pris jusqu’à presque 4h du matin pour résoudre le problème. Tout allait bien peu avant 2h du matin, mais j’ai ensuite dû informer les gens de ce qui s’était passé (la plupart de nos utilisateurs sont aux États-Unis).

2 « J'aime »

Ce problème devrait être résolu par ce commit dans le cœur de Discourse :

Donc, une fois que vous aurez mis à jour Discourse vers la dernière version, il devrait être sûr de mettre à jour discourse-encrypt vers la dernière version.

5 « J'aime »

Cela a effectivement fonctionné, la mise à niveau se déroule désormais sans problème.

3 « J'aime »

@david J’ai mis à jour vers la version 2.9.0.beta3, ce qui a causé le problème.

Concernant le processus de mise à jour, je le fais habituellement via l’interface utilisateur /admin/upgrade. Ce cas était différent.

J’ai seulement mis à jour docker-manager depuis l’interface de mise à jour. Après cela, j’ai dû m’occuper d’autres choses et je suis revenu sur le chemin /admin/upgrade quelques heures plus tard pour terminer le processus de mise à jour.

J’ai été accueilli par une page texte me disant d’aller sur l’hôte, de changer pour le répertoire /var/discourse, de faire git pull et de reconstruire l’application avec ./launcher… C’est donc ce que j’ai fait, et puis le chaos a suivi.

Bien que le stress et les nerfs aient été à vif, j’ai trouvé quelque chose sur ce forum concernant les TypeError non interceptés liés à un plugin, j’ai donc retiré tout ce qui n’était pas essentiel des plugins app.yml et reconstruit le conteneur. À ce moment-là, l’application Ember a recommencé à fonctionner.

1 « J'aime »

Ce sujet a été automatiquement fermé après 2 jours. Les nouvelles réponses ne sont plus autorisées.