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.
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
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…)
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…)
También tuve un problema al ejecutar esta actualización (actualización web)
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