Frontend del sitio en producción caído -- Error Ember/Test

El frontend de mi instancia de Discourse está completamente en blanco y no carga después de la nueva actualización. Esto no es bueno y estoy un poco en pánico porque los usuarios no están contentos. El backend parece estar en funcionamiento.

Esto sucedió después de la actualización más reciente de hoy, en una instancia de Digital Ocean que ejecuta un contenedor. Usé el lanzador para reconstruir la aplicación.

Cualquier ayuda es muy apreciada.

El error de la consola 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 Me gusta

Todo el HTML se está cargando bien, pero algo con la aplicación Ember no funciona…

Mirando el código donde falla, parece que Ember.Application.extend está lanzando un error por alguna razón

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

El culpable parece ser esta condición: !themeId || (0, _environment.isTesting)()

1 me gusta

Ugh…era un plugin…no estoy seguro de cuál es, pero después de investigar un poco aquí sospeché que podría haber sido un problema…eliminé cakeday, signatures, data explorer, discourse-video-upload y encryption. Los introduciré uno a la vez en una fecha posterior y veré si puedo identificar al culpable. Pero por ahora, la aplicación está de vuelta y no la tocaré.

Experiencia terrible. Me siento bastante culpable ahora mismo… probablemente debería tener un proceso de clonación de staging para estas actualizaciones en el futuro. Lección aprendida. O al menos siempre haré una instantánea antes de actualizar para poder restaurar en caso de fallo.

3 Me gusta

El problema es Discourse encrypt. Puedes solucionarlo poniéndolo al final de tu archivo yml y seleccionando el commit de antes de que se rompiera por primera vez (la verificación de firmas se rompió el otro día), así:

  - git clone https://github.com/discourse/docker-manager.git
  ... luego tus otros plugins ...
  - git clone https://github.com/discourse/discourse-encrypt.git
  - cd discourse-encrypt && git checkout 12639de

Como puedes ver, puse el plugin Discourse encrypt al final, por si acaso los comandos cd y git checkout afectaran a comandos posteriores (lo cual no creo que lo hicieran).

Y sí, ese es el hash del commit de la última versión que definitivamente funciona bien.

Mi sitio ahora funciona bien de nuevo. Y Discourse Encrypt tiene las marcas verdes de nuevo.

6 Me gusta

@TomSSL gracias por este desglose del problema

@sam Voy a presentar una solicitud mañana para el puesto de Ingeniero Full Stack. Creo que mientras persigo plugins rotos, intentaré unirme al equipo y trabajar en plugins :slight_smile:

Solo te enviaría un mensaje directo, pero esta instancia no me lo permite.

3 Me gusta

Ver Current Openings | Discourse - Civilized Discussion :slight_smile:

1 me gusta

Por favor, no dejes esta configuración en su lugar por mucho tiempo; tu instancia no recibirá futuras actualizaciones del plugin Encrypt. Es muy probable que eso cause problemas en el futuro.

Somos conscientes del problema de verificación de firmas, y estamos trabajando en una solución y hemos implementado una solución.

Sin embargo, este error de Ember.Test es inesperado. @Mycobee, ¿puedes confirmar qué versión de Discourse estás ejecutando? ¿Cómo ejecutaste la actualización? ¿A través de la interfaz de usuario /admin/upgrade?

4 Me gusta

Sí, esto es de vital importancia y olvidé mencionarlo (eran casi las 4 a.m. de mi hora cuando escribí esto y acababa de hacer que las cosas volvieran a funcionar y pensé en mirar aquí para ver si alguien más tenía el mismo problema). Esto es solo una solución temporal para que las cosas vuelvan a funcionar. Gracias por el recordatorio @david.

Esa solución no me funcionó cuando actualicé todo a las 00:00 UTC de esta mañana (hace diez horas y media). Solo actualicé mi instancia entonces porque vi que la verificación de firmas se había solucionado. Luego tuve que hacer la solución temporal descrita anteriormente. ¿Es posible que mi actualización habitual no haya captado el último código por alguna razón?

2 Me gusta

¿Seguías viendo el problema de verificación de firma :x:? ¿O te encontraste con el problema de Ember.Test?

Además, acabo de hablar con el equipo y parece que hemos identificado el problema de Ember.Test y tendremos una solución muy pronto. Actualizaremos aquí cuando esté disponible.

2 Me gusta

La página principal aparecía en blanco y tuve que desactivar todos los plugins (en modo seguro) para que el sitio cargara. Realizo actualizaciones semanales los lunes alrededor de las 9:00 UTC y esta fue una actualización adicional para solucionar el problema de verificación de firmas. Sin embargo… también se detectaron bastantes otros cambios, por supuesto. Y la versión también subió a 2.9.0beta3 durante ese período.

Como ya habrán visto (pero quizás alguien no), aquí está la diferencia de Discourse Encrypt entre la versión que tengo funcionando ahora y la última versión a fecha de este mensaje.

Además, en realidad no tardó casi hasta las 4 de la mañana en arreglarse. Todo estuvo bien poco antes de las 2 de la mañana, pero luego tuve que contarle a la gente lo que había pasado (la mayoría de nuestros usuarios están en EE. UU.).

2 Me gusta

Este problema debería estar solucionado por este commit en el núcleo de Discourse:

Así que, una vez que hayas actualizado Discourse a la última versión, debería ser seguro actualizar discourse-encrypt a la última versión.

5 Me gusta

Eso funcionó de hecho, la actualización ahora se realiza sin problemas.

3 Me gusta

@david Me actualicé a la versión 2.9.0.beta3, lo que provocó el problema.

Con respecto al proceso de actualización, normalmente lo hago a través de la interfaz de usuario /admin/upgrade. Este caso fue diferente.

Solo actualicé docker-manager desde la interfaz de actualización. Después de esto, tuve que ocuparme de otras cosas y volví a visitar la ruta /admin/upgrade unas horas después para completar el proceso de actualización.

Me encontré con una página de texto que me indicaba que fuera al host, cambiara al directorio /var/discourse, hiciera git pull y reconstruyera la aplicación con ./launcher… Así que eso es lo que hice, y luego sobrevino el caos.

Mientras el estrés y los nervios estaban a flor de piel, encontré algo en este foro sobre que TypeError no capturado estaba relacionado con un plugin, así que eliminé todo lo no esencial de los plugins de app.yml y reconstruí el contenedor. En ese momento, la aplicación Ember volvió a funcionar.

1 me gusta

Este tema se cerró automáticamente después de 2 días. Ya no se permiten nuevas respuestas.