أثناء محاولة تعيين EMBER_CLI_PROD_ASSETS إلى 1، أحصل على ما يلي وقت تجميع الأصول مسبقًا (الإصدار 2.9.0.beta2 الالتزام: d2de058ff51f204fcf85c86a00750a59505af3bb):
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.
لم ينجح الأمر بعد إعادة بناء المثيل. أنا أبحث بشكل أكبر عما يسبب استدعاء uv_os_get_passwd، أو بشكل عام عما يسبب هذا الخطأ، هل يتوقع أي مستخدم معين في النظام/الإعداد ليتم تعيينه؟
مثير للاهتمام، هذا ما أحصل عليه عند تنفيذ اقتراحك (وهو منطقي تمامًا إذا كان الهدف هو الوصول إلى أي نظام مكتبات داخلي بمستخدم عشوائي غير الجذر):
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']
}
>
كيف تقوم بتشغيل صورة Discourse بالضبط؟ هل هناك أي علامات إضافية للأمان؟
لقد كنا نستخدم حلاً حاويًا يعتمد على OpenShift، حيث يعمل Discourse بمعرف مستخدم عشوائي. لا توجد مشاكل حتى الآن، والنهج مشابه جدًا لدليل التثبيت الرسمي.
من المؤكد أنه يمكننا تجاوز هذه المشكلة عن طريق تعيين EMBER_CLI_PROD_ASSETS إلى 0، ويتم تجميع الأصول مسبقًا كما في الأيام الخوالي، ولكن عاجلاً أم آجلاً، إذا كانت خططك هي التحرك في هذا الاتجاه، فقد تشكل مشكلة حقيقية لمثل هذه الحلول إذا تم التخلي عن عملية التجميع المسبق الحالية.
لذا هناك بعض الأسئلة هنا:
هل لديك موعد تقديري للتخلي (إذا كان الأمر كذلك) عن تجميع الأصول مسبقًا بالطريقة القديمة؟
هل هناك أي طريقة للوصول إلى آليات os بطريقة مختلفة، أو التفكير في نهج مختلف، بحيث لا تزال الحلول الحاوية ذات معرفات المستخدم العشوائية تعمل؟
شكراً جزيلاً على النظر في هذا الأمر، أقدر ذلك كثيراً.
نعم، بالضبط. لقد قمنا بإصدار خط أنابيب الأصول الجديد هذا ببطء على مر السنين، حتى نتمكن من تتبع ما توصي به مشاريع EmberJS وأن نكون أقل تميزًا. نحن بالفعل في المرحلة النهائية من الطرح.
للتسجيل فقط، وسواء كان ذلك مفيدًا لشخص ما. هناك طريقة واحدة على الأقل لجعل ember cli يعمل كما هو متوقع مع معرف فريد عشوائي، وهي التأكد من أن المعرف الفريد العشوائي المعين لديه إدخال تحت /etc/passwd في وقت تشغيل عملية rake assets:precompile.
شيء مثل:
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 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)
...
لقد لاحظت أيضًا أن هذه العملية مكلفة للغاية، حيث تستهلك ما يقرب من 2 جيجابايت من ذاكرة الوصول العشوائي لمجرد تجميع الأصول
لقد كانت تستخدم أكثر من 4 جيجابايت الأسبوع الماضي، لكننا تمكنا من جعلها تعمل على خوادم بذاكرة وصول عشوائي تبلغ 1 جيجابايت / مبادلة تبلغ 2 جيجابايت مؤخرًا.