Mientras intento configurar EMBER_CLI_PROD_ASSETS en 1, estoy obteniendo lo siguiente al precompilar los assets (versión 2.9.0.beta2 commit: d2de058ff51f204fcf85c86a00750a59505af3bb):
yarn run v1.22.17
$ /var/www/discourse/app/assets/javascripts/node_modules/.bin/ember build -prod
WARNING: Node v16.13.2 no ha sido probado con Ember CLI en tu plataforma. Recomendamos que uses la versión "Active LTS" más reciente de Node.js. Ver https://git.io/v7S5n para detalles.
DEPRECATION: La integración de jQuery en Ember ha sido deprecada y se eliminará con Ember 4.0. Puedes optar por no usar jQuery o instalar el addon `@ember/jquery` para proporcionar la integración de jQuery. Por favor, consulta la guía de deprecación para más detalles: https://emberjs.com/deprecations/v3.x#toc_jquery-apis
A system error occurred: uv_os_get_passwd returned ENOENT (no such file or directory)
node:internal/errors:464
ErrorCaptureStackTrace(err);
^
SystemError [ERR_SYSTEM_ERROR]: A system error occurred: uv_os_get_passwd returned ENOENT (no such file or directory)
at new SystemError (node:internal/errors:233:5)
at new NodeError (node:internal/errors:336:7)
at Object.userInfo (node:os:347:11)
at summarizeProcess (/var/www/discourse/app/assets/javascripts/node_modules/console-ui/lib/summarize-process.js:17:15)
at writeError (/var/www/discourse/app/assets/javascripts/node_modules/console-ui/lib/write-error.js:114:3)
at UI.writeError (/var/www/discourse/app/assets/javascripts/node_modules/console-ui/lib/index.js:167:20)
at CLI.logError (/var/www/discourse/app/assets/javascripts/node_modules/ember-cli/lib/cli/cli.js:318:13)
at CLI.run (/var/www/discourse/app/assets/javascripts/node_modules/ember-cli/lib/cli/cli.js:253:12)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
at async module.exports (/var/www/discourse/app/assets/javascripts/node_modules/ember-cli/lib/cli/index.js:145:12) {
code: 'ERR_SYSTEM_ERROR',
info: {
errno: -2,
code: 'ENOENT',
message: 'no such file or directory',
syscall: 'uv_os_get_passwd'
},
errno: [Getter/Setter],
syscall: [Getter/Setter]
}
error Command failed with exit code 1.
info Visita https://yarnpkg.com/en/docs/cli/run para documentación sobre este comando.
No tuve éxito después de reconstruir la instancia. Estoy buscando más bien qué está causando la llamada uv_os_get_passwd, o más en general, qué está causando este error, ¿espera algún usuario específico en el sistema/configuración que deba configurarse?
¿Cómo estás ejecutando exactamente la imagen de Discourse? ¿Hay alguna bandera adicional para la seguridad?
Siguiendo este rastro, el problema es que la compilación de Ember-CLI está fallando y, al intentar imprimir el error, está lanzando otra excepción y enmascarando la real.
¿Puedes entrar en la imagen de Discourse y probar:
node
const os = require('os');
os.userInfo().shell
Interesante, esto es lo que obtengo al ejecutar tu sugerencia (y tiene total sentido si la intención es acceder a cualquier sistema de biblioteca interna con un usuario aleatorio que no sea root):
node
Welcome to Node.js v16.13.2.
Type ".help" for more information.
> const os = require('os');
undefined
> os.userInfo().shell
Uncaught:
SystemError [ERR_SYSTEM_ERROR]: A system error occurred: uv_os_get_passwd returned ENOENT (no such file or directory)
at __node_internal_captureLargerStackTrace (node:internal/errors:464:5)
at new SystemError (node:internal/errors:233:5)
at new NodeError (node:internal/errors:336:7)
at Object.userInfo (node:os:347:11) {
code: 'ERR_SYSTEM_ERROR',
info: {
errno: -2,
code: 'ENOENT',
message: 'no such file or directory',
syscall: 'uv_os_get_passwd'
},
errno: [Getter/Setter: -2],
syscall: [Getter/Setter: 'uv_os_get_passwd']
}
>
¿Cómo exactamente estás ejecutando la imagen de Discourse? ¿Hay alguna bandera adicional por seguridad?
Hemos estado utilizando una solución contenerizada basada en OpenShift, en la que Discourse se ejecuta con un ID de usuario aleatorio. No hemos tenido problemas hasta ahora, un enfoque muy similar a la guía de instalación oficial.
Ciertamente podemos evitar este problema estableciendo EMBER_CLI_PROD_ASSETS en 0, los activos se precompilan como en los viejos tiempos, pero tarde o temprano, si tus planes son avanzar en esta dirección, puede suponer un problema real para este tipo de soluciones si el proceso de precompilación actual se abandona.
Así que un par de preguntas aquí:
¿Tenéis una fecha estimada para abandonar (si ese es el caso) la precompilación de activos de la vieja escuela?
¿Hay alguna forma de acceder a la maquinaria os de otra manera, o considerar un enfoque diferente, para que las soluciones contenerizadas con IDs de usuario aleatorios puedan seguir funcionando?
Eliminaremos EMBER_CLI_PROD_ASSETS en las próximas semanas.
No lo usamos directamente, sino una dependencia, de una dependencia, de una dependencia… Creo que es una llamada extraña también, pero no es algo sobre lo que tengamos mucho control.
Sí, entendido después de la publicación anterior. A menos que el equipo tome alguna acción/verificación especial para permitir esto, la era de usar identificaciones de usuario aleatorias ha terminado en mi opinión.
Sí, exactamente. Hemos estado lanzando lentamente este nuevo pipeline de assets durante años, para poder seguir lo que recomienda el proyecto EmberJS y ser menos un caso aislado. Ya estamos en la fase final del despliegue.
Solo para que conste, y por si le sirve a alguien. Hay al menos una forma de hacer que ember cli funcione como se espera con un uid aleatorio, y es asegurándose de que el uid aleatorio asignado tenga una entrada en /etc/passwd en el momento de ejecutar la operación rake assets:precompile.
Algo como:
if [ `id -u` -ge 10000 ]; then
cat /etc/passwd | sed -e "s/^discourse:/builder:/" > /tmp/passwd
echo "discourse:x:`id -u`:`id -g`:,,,:/home/discourse:/bin/bash" >> /tmp/passwd
cat /tmp/passwd > /etc/passwd
rm /tmp/passwd
fi
yarn run v1.22.17
$ /discourse/app/assets/javascripts/node_modules/.bin/ember build -prod
WARNING: Node v16.13.2 no está probado con Ember CLI en tu plataforma. Recomendamos que uses la versión "Active LTS" más reciente de Node.js. Consulta https://git.io/v7S5n para obtener más detalles.
DEPRECATION: La integración de jQuery en Ember ha sido deprecada y se eliminará con Ember 4.0. Puedes optar por no usar jQuery o instalar el addon `@ember/jquery` para proporcionar la integración de jQuery. Consulta la guía de deprecación para más detalles: https://emberjs.com/deprecations/v3.x#toc_jquery-apis
- Building
Environment: production
- Building
- building...
[WARN] (broccoli-terser-sourcemap) Minifying "assets/chunk.529.6ee9018498e97f872147.js" took: 24288ms (more than 20,000ms)
...
También he notado que esta operación es bastante costosa, consumiendo casi 2GB de RAM solo para precompilar