Actualización fallida de v2.7.0.beta1 a v2.7.0.beta2

Por favor, consulte este gist gist:86508bebb133a06f79fadaeba345e3d6 · GitHub

Esta es una instalación estándar y autónoma de Discourse, intentando actualizar desde v2.7.0.beta1 a v2.7.0.beta2

El fallo se encuentra aquí:

uglifyjs '/var/www/discourse/public/assets/_vendor-b631d4ab0775fdbe453aa2158e18dc41826d0ba619e5f2731e5b9fa4c458af99.js' -m -c -o '/var/www/discourse/public/assets/vendor-b631d4ab0775fdbe453aa2158e18dc41826d0ba619e5f2731e5b9fa4c458af99.js' --source-map "base='/var/www/discourse/public/assets',root='/assets',url='/assets/vendor-b631d4ab0775fdbe453aa2158e18dc41826d0ba619e5f2731e5b9fa4c458af99.js.map'"
Error de análisis en _vendor-b631d4ab0775fdbe453aa2158e18dc41826d0ba619e5f2731e5b9fa4c458af99.js:1850,34
        return Handlebars.compile(...arguments);
                                  ^
ERROR: Token inesperado: punc «.»
    at JS_Parse_Error.get (eval at <anónimo> (/usr/lib/node_modules/uglify-js/tools/node.js:18:1), <anónimo>:71:23)
    at fatal (/usr/lib/node_modules/uglify-js/bin/uglifyjs:394:27)
    at run (/usr/lib/node_modules/uglify-js/bin/uglifyjs:343:9)
    at Object.<anónimo> (/usr/lib/node_modules/uglify-js/bin/uglifyjs:259:5)
    at Module._compile (internal/modules/cjs/loader.js:778:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:831:12)
rake aborted!
Errno::ENOENT: No existe el archivo o directorio @ rb_file_s_size - /var/www/discourse/public/assets/vendor-b631d4ab0775fdbe453aa2158e18dc41826d0ba619e5f2731e5b9fa4c458af99.js
/var/www/discourse/lib/tasks/assets.rake:287:in `size'
/var/www/discourse/lib/tasks/assets.rake:287:in `block (4 levels) in <main>'
/var/www/discourse/lib/tasks/assets.rake:178:in `block in concurrent?'
/var/www/discourse/lib/tasks/assets.rake:278:in `block (3 levels) in <main>'
/var/www/discourse/lib/tasks/assets.rake:269:in `each'
/var/www/discourse/lib/tasks/assets.rake:269:in `block (2 levels) in <main>'
/var/www/discourse/lib/tasks/assets.rake:178:in `concurrent?'
/var/www/discourse/lib/tasks/assets.rake:266:in `block in <main>'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.3/exe/rake:27:in `<top (required)>'
/usr/local/bin/bundle:23:in `load'
/usr/local/bin/bundle:23:in `<main>'
Tareas: TOP => assets:precompile
(Vea el rastreo completo ejecutando la tarea con --trace)
Gestor de Docker: FALLÓ LA ACTUALIZACIÓN

¿Alguna idea? Como resultado, el sitio está offline. Gracias.

Eso es un poco inquietante. ¿Estás sin espacio en el disco o algo así?

Hola, no, en el host hay 70 GB libres. Solo se está utilizando el 1% de los inodos.

Asumí que el error ‘no such file or directory’ era solo un efecto secundario de esto:

Parse error at _vendor-b631d4ab0775fdbe453aa2158e18dc41826d0ba619e5f2731e5b9fa4c458af99.js:1850,34
        return Handlebars.compile(...arguments);
                                  ^
ERROR: Unexpected token: punc «.»

Ese archivo definitivamente existe:

root@redmine:/var/discourse# ./launcher enter app
ls -al ls -al root@xxxxx-app:/var/www/discourse# ls -al /var/www/discourse/public/assets/vendor-b631d4ab0775fdbe453aa2158e18dc41826d0ba619e5f2731e5b9fa4c458af99.js
-rw-r--r-- 1 discourse www-data 659907 Jan 22 04:55 /var/www/discourse/public/assets/vendor-b631d4ab0775fdbe453aa2158e18dc41826d0ba619e5f2731e5b9fa4c458af99.js

No estoy seguro. Acabo de actualizar mis dos instancias autoalojadas sin ningún problema.

¿Hay algún plugin inusual, plugins de terceros o personalizaciones extensas?

Gracias… absolutamente ningún plugin ni personalizaciones pesadas… era esencialmente una instalación fresca a finales de 2020, solo pequeños ajustes en la configuración a través de la interfaz de administración de cosas como permisos de moderadores, etc. Muy extraño.

Lamentablemente no tomé una copia de seguridad antes de ejecutar la actualización, aunque tengo algunas automatizadas de hace un par de días. Supongo que esa es mi única salida por ahora… no teniendo mentalidad de Ruby, no tengo idea de cómo resolver ese error.

¡Ah, parece que ejecutar ./launcher restart app al menos lo ha vuelto a poner en línea a pesar de las actualizaciones del esquema de la base de datos que se han ejecutado. Antes de eso, arrojaba un error 500. Uf.

Estos son los que hay en el directorio de plugins; supongo que vinieron con la instalación principal, ya que no he añadido ninguno manualmente.

root@redmine-app:/var/www/discourse# ls -al plugins/
total 12
drwxr-xr-x 22 discourse discourse 4096 Nov  4 04:54 .
drwxr-xr-x 56 discourse discourse 4096 Jan 22 04:55 ..
drwxr-xr-x 13 discourse discourse   43 Nov  4 04:54 discourse-details
drwxr-xr-x 16 discourse discourse   54 Nov  4 04:54 discourse-local-dates
drwxr-xr-x 20 discourse discourse   69 Jan 22 04:55 discourse-narrative-bot
drwxr-xr-x 11 discourse discourse   59 Nov  4 04:54 discourse-presence
drwxr-xr-x 19 discourse root      4096 Jan 22 04:43 docker_manager
drwxr-xr-x  4 discourse discourse   51 Sep 28 05:11 lazy-yt
drwxr-xr-x 25 discourse discourse   99 Nov  4 04:54 poll
drwxr-xr-x  8 discourse www-data   129 Nov  4 04:54 styleguide

El tema del sitio está un poco roto después del reinicio, supongo porque los activos no terminaron de compilarse… Me pregunto si hay alguna forma de completarlo manualmente.

Esta es la sección del archivo JS del proveedor sobre la que está quejándose:

// permitirnos importar esto como un módulo
if (typeof define !== "undefined") {
  define("handlebars", ["exports"], function (__exports__) {
    // Es posible que no esté definido en el lado del servidor, lo cual está bien para pretty-text
    if (typeof Handlebars !== "undefined") {
      // eslint-disable-next-line
      __exports__.default = Handlebars;
      __exports__.compile = function () {
        // eslint-disable-next-line
        return Handlebars.compile(...arguments);
      };
    }
  });

  define("handlebars-compiler", ["exports"], function (__exports__) {
    // eslint-disable-next-line
    __exports__.default = Handlebars.compile;
  });
}
;

La línea 1850 (la que genera el error) es este fragmento:

        return Handlebars.compile(...arguments);

¿Hay algún truco temporal que pueda hacer aquí para pasar esto? ¿O ese archivo se generará cada vez que intente la actualización? (P.D. cree que he completado la actualización tras el reinicio… pero el tema está roto… me pregunto si puedo de alguna manera superar este paso o si tendré que restaurar desde una copia de seguridad, básicamente…)

Toda esa sección del código proviene de este archivo:

app/assets/javascripts/handlebars-shim.js

Supongo que uglify-js considera return Handlebars.compile(...arguments); como un error de sintaxis.

Lo que no entiendo es cómo esto podría ser exclusivo de mi instalación, todo está dentro del contenedor Docker.

¿Supongo que esto llegó a través de este commit? DEV: Sync up more Ember CLI features (#11790) · discourse/discourse@83347ac · GitHub

OK, así que no sé por qué, pero ejecuté el proceso de actualización manual (git pull; ./launcher rebuild app) y funcionó.

Mucha otra actividad, como actualizaciones de PostgreSQL, etc., se incluyó en esa actualización manual.

Mi suposición: algo en ese commit anterior no era compatible con uglify-js, la versión de Rails o algo similar, en el contenedor original. Básicamente, fue una actualización que requería el proceso de actualización ‘manual’.

Como la interfaz de administración web me permitió actualizar docker_manager y luego la aplicación Discourse en sí, asumí que esto no sería necesario (sé que a veces indica que una actualización a través de la administración web no se puede realizar y que debe hacerse manualmente… pero en este caso no ocurrió eso, y probablemente debería haberlo hecho…)

Gracias por tu ayuda de todos modos.

Me pasó lo mismo: la actualización web falló con un error de “Unexpected token: punc”, pero el pull/reconstrucción manual funcionó.

También tuve un problema al ejecutar esta actualización (actualización web) :frowning:
Después de ejecutar estos comandos:
cd /var/discourse
git pull
./launcher rebuild app
Discourse funciona, pero no es posible acceder al panel de administración (/admin)

La actualización de Ubuntu ayudó a restaurar el funcionamiento

El anuncio indicaba que era necesario realizar una reconstrucción desde la línea de comandos. No estoy seguro de por qué la interfaz web no supo aplicar esa restricción.

Curiosamente, yo también estaba intentando usar esa funcionalidad en desarrollo y no me funciona… El objeto Handlebars solo tiene create(), no compile(), aunque es posible que esté persiguiendo una idea equivocada… Lo he planteado aquí: Adding a bespoke raw template