EMBER_CLI_PROD_ASSETS إلى 1 يعطل تجميع الأصول مسبقًا

يأتي من New installs will default to Ember CLI builds in Production - #36 by david

مرحباً بالفريق،

أثناء محاولة تعيين 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.

أي تلميح حول سبب حدوث هذا؟

تحياتي،
إسماعيل

إعجاب واحد (1)

هل هذا تثبيت إنتاجي باستخدام دليل التثبيت؟

هل يمكنك تجربة إعادة بناء؟

إعجاب واحد (1)

لم ينجح الأمر بعد إعادة بناء المثيل. أنا أبحث بشكل أكبر عما يسبب استدعاء uv_os_get_passwd، أو بشكل عام عما يسبب هذا الخطأ، هل يتوقع أي مستخدم معين في النظام/الإعداد ليتم تعيينه؟

تحياتي،
إسماعيل

كيف تقوم بتشغيل صورة Discourse بالضبط؟ هل هناك أي علامات إضافية للأمان؟

باتباع هذا التتبع، تكمن المشكلة في فشل بناء Ember-CLI، وأثناء محاولة طباعة الخطأ، فإنه يلقي استثناءً آخر ويخفي الخطأ الحقيقي.

هل يمكنك الدخول إلى صورة Discourse وتجربة:

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

؟

إعجاب واحد (1)

مثير للاهتمام، هذا ما أحصل عليه عند تنفيذ اقتراحك (وهو منطقي تمامًا إذا كان الهدف هو الوصول إلى أي نظام مكتبات داخلي بمستخدم عشوائي غير الجذر):

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 بطريقة مختلفة، أو التفكير في نهج مختلف، بحيث لا تزال الحلول الحاوية ذات معرفات المستخدم العشوائية تعمل؟

شكراً جزيلاً على النظر في هذا الأمر، أقدر ذلك كثيراً.

تحياتي،
إسماعيل

إعجاب واحد (1)

سنقوم بإزالة EMBER_CLI_PROD_ASSETS في الأسابيع القليلة القادمة.

نحن لا نستخدم ذلك مباشرة، ولكن تبعية، لتبعية، لتبعية… أعتقد أنها استدعاء غريب أيضًا، ولكنه ليس شيئًا نتحكم فيه كثيرًا.

إعجاب واحد (1)

لاحظ أن الخطأ الذي تراه ليس الخطأ الفعلي.
إنه خطأ يحدث عند محاولة عرض الخطأ الحقيقي لك…

3 إعجابات

إنها نفس المشكلة بالضبط كما في Issue with non 'username' defined · Issue #2373 · nodejs/node-gyp · GitHub و os.userInfo throws if no username in docker container · Issue #25714 · nodejs/node · GitHub
باستخدام معرف مستخدم عشوائي، يشتكي node عند تحميل طرق وخصائص الأدوات المساعدة المتعلقة بالنظام os.

فقط للتأكيد، الطريقة القديمة سيتم إيقافها/إزالتها تمامًا، صحيح؟

تحياتي،
إسماعيل

إعجاب واحد (1)

نعم، فهمت بعد المنشور أعلاه. ما لم يقم الفريق بأي إجراءات/فحوصات خاصة للسماح بذلك، فقد انتهى عصر استخدام معرفات المستخدم العشوائية في رأيي.

تحياتي،
إسماعيل

إعجاب واحد (1)

نعم، بالضبط. لقد قمنا بإصدار خط أنابيب الأصول الجديد هذا ببطء على مر السنين، حتى نتمكن من تتبع ما توصي به مشاريع EmberJS وأن نكون أقل تميزًا. نحن بالفعل في المرحلة النهائية من الطرح.

إعجابَين (2)

ممتاز، كل شيء واضح.

كالعادة، شكراً جزيلاً على معلوماتك المفصلة، أقدرها كثيراً.

تحياتي،
إسماعيل

إعجاب واحد (1)

للتسجيل فقط، وسواء كان ذلك مفيدًا لشخص ما. هناك طريقة واحدة على الأقل لجعل 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

وبالتالي، فإن الأمر app/assets/javascripts/discourse run ember build -prod (من discourse/assets.rake at tests-passed · discourse/discourse · GitHub) سيؤدي إلى ذلك.

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 جيجابايت من ذاكرة الوصول العشوائي لمجرد تجميع الأصول :scream:

تحياتي،
إسماعيل

إعجابَين (2)

لقد كانت تستخدم أكثر من 4 جيجابايت الأسبوع الماضي، لكننا تمكنا من جعلها تعمل على خوادم بذاكرة وصول عشوائي تبلغ 1 جيجابايت / مبادلة تبلغ 2 جيجابايت مؤخرًا.

4 إعجابات

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