Consumo excesivo de memoria debido a la precompilación de activos

Hola a todos,

Muchas gracias por todos los consejos que nos habéis proporcionado, los agradecemos mucho. Creemos que hemos identificado la causa raíz de los problemas de memoria recientes.

Anteriormente, ejecutar bundle exec rake assets:precompile:build en tiempo de compilación (como root) no requería tener Redis ni conexión a la base de datos. Este comportamiento ha cambiado (ref: Introducing pre-compiled JS assets for self-hosters y Introducing a new build system for plugins).

Para adaptarnos a esto, movimos el paso bundle exec rake assets:precompile:build a un contenedor de inicialización en tiempo de ejecución (antes de ejecutar db:migrate, etc.). Esto permite que se ejecute como el usuario discourse con el acceso a los servicios necesario tanto para Redis como para la base de datos.

Sin embargo, durante la ejecución, el proceso entra en un bucle en lib/plugin/js_manager.rb. Al observar ps -fe, vemos que pnpm intenta repetidamente agregarse a sí mismo, lo que lleva a la saturación de memoria:

...
discour+     704     688  5 11:00 pts/0    00:00:00 node /usr/bin/pnpm -C=frontend/asset-processor node build.js
discour+     718     704  5 11:00 pts/0    00:00:00 node /usr/bin/pnpm add pnpm@10.28.0 --loglevel=error --allow-build=@pnpm
discour+     729     718  6 11:00 pts/0    00:00:00 node /usr/bin/pnpm add pnpm@10.28.0 --loglevel=error --allow-build=@pnpm
discour+     740     729  6 11:00 pts/0    00:00:00 node /usr/bin/pnpm add pnpm@10.28.0 --loglevel=error --allow-build=@pnpm
discour+     754     740  7 11:00 pts/0    00:00:00 node /usr/bin/pnpm add pnpm@10.28.0 --loglevel=error --allow-build=@pnpm
...
# y la lista empieza a crecer y sigue y sigue, provocando la saturación de memoria

En nuestras pruebas, descubrimos que ejecutar el contenedor de inicialización como root en su lugar, y ejecutar npm uninstall -g pnpm seguido de npm install -g pnpm@10.28.0, resuelve el bucle y permite que la compilación del complemento finalice con éxito:

...
[Plugin::JsManager] Compilando 49 complementos...
[Plugin::JsManager] Compilación inicial de complementos finalizada en 5.82s

Por lo tanto, antes de sobreingenierizar nuestra infraestructura y probablemente cambiar nuestro diseño, creo que esta pregunta es más para @david: ¿hay planes de restaurar el comportamiento anterior para assets:precompile:build para que pueda ejecutarse sin Redis ni conexión a la base de datos (similar a lo que estás haciendo con el flujo DISCOURSE_DOWNLOAD_PRE_BUILT_ASSETS: 0)?

Por cierto, y por curiosidad: ¿por qué ejecutar el proceso node como un usuario no root desencadena este bucle de instalación recursiva de pnpm, mientras que ejecutarlo como root parece evitarlo?

Saludos,
Ismael