EMBER_CLI_PROD_ASSETS auf 1 setzt Assets beim Vorabkompilieren zurück

Kommt von New installs will default to Ember CLI builds in Production - #36 by david

Hallo Team,

Beim Versuch, EMBER_CLI_PROD_ASSETS auf 1 zu setzen, erhalte ich während der Vorabkompilierung von Assets (Version 2.9.0.beta2 Commit: d2de058ff51f204fcf85c86a00750a59505af3bb) Folgendes:

yarn run v1.22.17
$ /var/www/discourse/app/assets/javascripts/node_modules/.bin/ember build -prod
WARNING: Node v16.13.2 is not tested against Ember CLI on your platform. We recommend that you use the most-recent "Active LTS" version of Node.js. See https://git.io/v7S5n for details.
DEPRECATION: The integration of jQuery into Ember has been deprecated and will be removed with Ember 4.0. You can either opt-out of using jQuery, or install the `@ember/jquery` addon to provide the jQuery integration. Please consult the deprecation guide for further details: 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 Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

Irgendeinen Hinweis, warum das passiert?

Viele Grüße,
Ismael

1 „Gefällt mir“

Ist das eine Produktionsinstallation mit der Installationsanleitung?

Können Sie einen Neubau versuchen?

1 „Gefällt mir“

Kein Erfolg nach einem Neuaufbau der Instanz. Ich suche eher danach, was den Aufruf von uv_os_get_passwd verursacht, oder allgemeiner, was diesen Fehler verursacht. Erwartet dies, dass ein bestimmter Benutzer im System/in den Einstellungen festgelegt ist?

Viele Grüße,
Ismael

Wie genau führen Sie das Discourse-Image aus? Gibt es zusätzliche Flags für die Sicherheit?

Wenn Sie dieser Spur folgen, besteht das Problem darin, dass der Ember-CLI-Build fehlschlägt, und während des Versuchs, den Fehler auszugeben, wird eine weitere Ausnahme ausgelöst, die den eigentlichen Fehler verschleiert.

Können Sie in das Discourse-Image wechseln und Folgendes versuchen:

node
const os = require('os');
os.userInfo().shell

?

1 „Gefällt mir“

Interessant, das ist, was ich erhalte, wenn ich Ihren Vorschlag ausführe (und das ergibt absolut Sinn, wenn die Absicht darin besteht, auf ein internes Bibliothekssystem mit einem zufälligen Benutzer außer Root zuzugreifen):

node
Willkommen bei Node.js v16.13.2.
Geben Sie ".help" für weitere Informationen ein.

> const os = require('os');
undefined

> os.userInfo().shell
Uncaught:
SystemError [ERR_SYSTEM_ERROR]: Ein Systemfehler ist aufgetreten: uv_os_get_passwd gab ENOENT (keine solche Datei oder Verzeichnis) zurück
    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']
}

>

Wie genau führen Sie das Discourse-Image aus? Gibt es zusätzliche Flags für die Sicherheit?

Wir verwenden eine containerisierte Lösung auf Basis von OpenShift, in der Discourse mit einer zufälligen Benutzer-ID läuft. Bisher keine Probleme, ein Ansatz, der dem offiziellen Installationsleitfaden sehr ähnlich ist.
Sicherlich können wir dieses Problem umgehen, indem wir EMBER_CLI_PROD_ASSETS auf 0 setzen, Assets werden wie in alten Zeiten vorkompiliert, aber früher oder später, wenn Ihre Pläne in diese Richtung gehen, kann dies ein echtes Problem für solche Lösungen darstellen, wenn der aktuelle Vorkompilierungsprozess aufgegeben wird.

Hier also ein paar Fragen:

  • Haben Sie einen ETA für die Aufgabe (falls dies der Fall ist) der Vorkompilierung von Assets auf die alte Weise?
  • Gibt es eine Möglichkeit, auf die os-Maschinen auf andere Weise zuzugreifen oder einen anderen Ansatz zu wählen, damit containerisierte Lösungen mit zufälligen Benutzer-IDs weiterhin funktionieren?

Vielen Dank für Ihre Bemühungen, sehr geschätzt.

Viele Grüße,
Ismael

1 „Gefällt mir“

Wir werden das EMBER_CLI_PROD_ASSETS in den nächsten Wochen entfernen.

Wir verwenden dies nicht direkt, sondern eine Abhängigkeit, einer Abhängigkeit, einer Abhängigkeit … Ich denke, es ist ein seltsamer Aufruf, aber es liegt nicht in unserer Hand.

1 „Gefällt mir“

Beachten Sie, dass der Fehler, den Sie sehen, nicht der eigentliche Fehler ist.
Es ist ein Fehler, der auftritt, wenn versucht wird, Ihnen den eigentlichen Fehler anzuzeigen…

3 „Gefällt mir“

Es ist genau dasselbe Problem wie in Issue with non 'username' defined · Issue #2373 · nodejs/node-gyp · GitHub und os.userInfo throws if no username in docker container · Issue #25714 · nodejs/node · GitHub

Durch die Verwendung einer zufälligen Benutzer-ID beschwert sich Node beim Laden von os-systembezogenen Hilfsmethoden und -eigenschaften.

Nur zur Bestätigung, der alte Weg wird vollständig veraltet/entfernt, richtig?

Viele Grüße,
Ismael

1 „Gefällt mir“

Ja, verstanden nach dem obigen Beitrag. Es sei denn, das Team unternimmt spezielle Aktionen/Prüfungen, um dies zu ermöglichen, ist die Ära der Verwendung zufälliger Benutzer-IDs meiner Meinung nach vorbei.

Viele Grüße,
Ismael

1 „Gefällt mir“

Ja, genau. Wir haben diese neue Asset-Pipeline über Jahre hinweg langsam eingeführt, damit wir verfolgen können, was das EmberJS-Projekt empfiehlt, und weniger ein Sonderfall sind. Wir befinden uns bereits in der Endphase der Einführung.

2 „Gefällt mir“

Ausgezeichnet, alles klar.

Wie immer, vielen Dank für Ihre detaillierten Informationen, sehr geschätzt.

Viele Grüße,
Ismael

1 „Gefällt mir“

Nur für das Protokoll, und ob es für jemanden nützlich ist. Es gibt mindestens eine Möglichkeit, ember cli wie erwartet mit einer zufälligen UID zum Laufen zu bringen, und zwar dadurch, dass sichergestellt wird, dass die zugewiesene zufällige UID einen Eintrag unter /etc/passwd hat, wenn der Vorgang rake assets:precompile ausgeführt wird.

So etwas wie:

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

Somit wird der Befehl app/assets/javascripts/discourse run ember build -prod (aus discourse/assets.rake at tests-passed · discourse/discourse · GitHub) dies bewirken.

yarn run v1.22.17
$ /discourse/app/assets/javascripts/node_modules/.bin/ember build -prod
WARNING: Node v16.13.2 is not tested against Ember CLI on your platform. We recommend that you use the most-recent "Active LTS" version of Node.js. See https://git.io/v7S5n for details.
DEPRECATION: The integration of jQuery into Ember has been deprecated and will be removed with Ember 4.0. You can either opt-out of using jQuery, or install the `@ember/jquery` addon to provide the jQuery integration. Please consult the deprecation guide for further details: 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)
...

Mir ist auch aufgefallen, dass dieser Vorgang ziemlich teuer ist und fast 2 GB RAM nur für die Vorabkompilierung verbraucht :scream:

Cheers,
Ismael

2 „Gefällt mir“

Letzte Woche wurden über 4 GB verbraucht, aber wir haben es kürzlich geschafft, es auf 1 GB RAM/2 GB Swap-Servern zum Laufen zu bringen.

4 „Gefällt mir“

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.