تحديث من 1.123.6 إلى 1.123.61 → استخدام prom-client في عقدة الكود معطل

وصف المشكلة/الخطأ/السؤال

قمنا بالتحديث مؤخراً من 1.123.6 إلى 1.123.61. لدينا سير عمل OTEL لتتبع المقاييس المخصصة التي تستخدم عقدة الكود والمكتبة prom-client المستخدمة داخلياً بهذا الشكل const client = require('prom-client');. هذا لم يعد يعمل بسبب الخطأ “Cannot find module ‘prom-client’”. لقد فعلنا N8N_METRICS وقمنا أيضاً بتعيين NODE_FUNCTION_ALLOW_EXTERNAL إلى "prom-client". كان هذا يعمل في 1.123.6. هل هذا تراجع أم تغيير في الإصدار؟

يرجى مشاركة سير العمل الخاص بك

شارك الناتج الذي يرجعه العقدة الأخيرة

[
{
“name”: “n8n_learning_progress_achievement_sync_total”,
“description”: “Number of learning progress syncs from achievement webhook”,
“values”: {
“academy”: “faps-fernstudium”,
“testStatus”: “passed”,
“assignment”: 17392228439111
},
“error”: “Cannot find module ‘prom-client’ [line 1, for item 0]”
}
]

معلومات حول إعدادك لـ n8n

  • إصدار n8n: 1.123.61
  • قاعدة البيانات (الافتراضي: SQLite): Postgres
  • إعداد n8n EXECUTIONS_PROCESS (الافتراضي: own, main): own, main
  • تشغيل n8n عبر (Docker, npm, n8n cloud, تطبيق سطح المكتب): Docker على render.com
  • نظام التشغيل:

@Florian_Glappa

يبدو أن هذا انحدار في الأداء.

يمكنك تعديل أمر البدء على Render لتثبيت الحزمة قبل بدء n8n:

npm install prom-client && n8n start

أو يمكنك إرجاع إصدار صورة Docker الخاصة بك إلى 1.123.6 حتى يتم إصدار إصلاح.

إذا اخترت فتح مشكلة على GitHub، يمكنك تصنيفها كـ Regression​.

  • الإصدار المتأثر​: 1.123.61
  • الإصدار الذي يعمل​: 1.123.6
  • البيئة​: Docker
  • المشكلة​: لم تعد prom-client مرفوعة إلى node_modules الجذر، مما يكسر require('prom-client') في عقد الأكواد على الرغم من تعيين NODE_FUNCTION_ALLOW_EXTERNAL.

مرحبا @Florian_Glappa ،

هذه المشكلة هي نتيجة جانبية لتحديثات حزم إعادة تجميع الاعتماديات والتعديلات الهيكلية الأخيرة في n8n، وليست تغييراً كسراً متعمداً لعقدة Code.

لماذا توقفت عن العمل:

سابقاً، كان prom-client موجوداً كاعتمادية غير مجمعة على مستوى أعلى في node_modules الجذري في n8n. وضع NODE_FUNCTION_ALLOW_EXTERNAL=prom-client سمح لعقدة Code بحل نسخة n8n الداخلية. في الإصدارات الأخيرة، حدثت n8n هيكل الحزم الداخلي/bundler (معزول الاعتماديات الداخلية)، لذا لم يعد prom-client مكشوفاً مباشرة في مجلد node_modules الجذري ليتمكن محلل وحدات Node من العثور عليه.

الاعتماد على اعتماديات فرعية داخلية في n8n عبر require() يمكن أن ينقطع عبر تحديثات الإصدار عندما تتحرك الحزم الداخلية.


كيفية إصلاحها (بما أنك تعمل عبر Docker على Render.com):

الحل الدائم هو تثبيت prom-client بشكل صريح كوحدة خارجية في حاوية Docker الخاصة بك حتى يتمكن Node.js من حلها دائماً.

الحل 1: Dockerfile مخصص (موصى به)

إذا كنت تنشر عبر Dockerfile على Render، قم بتحديث Dockerfile الخاص بك لتثبيت prom-client بشكل صريح:

FROM n8nio/n8n:1.123.61

USER root
# تثبيت prom-client عالمياً حتى تتمكن عقدة Code من طلبها
RUN npm install -g prom-client
USER node

# تأكد من أن NODE_PATH يتضمن الوحدات العالمية
ENV NODE_PATH=/usr/local/lib/node_modules

تأكد من بقاء متغير البيئة الخاص بك:

NODE_FUNCTION_ALLOW_EXTERNAL=prom-client

الحل 2: أمر بدء Render (بديل)

إذا كنت تشغل صورة n8nio/n8n الرسمية مباشرة على Render بدون Dockerfile مخصص، يمكنك إضافة script بدء أو override أمر قبل بدء n8n:

cd /home/node/.n8n && npm install prom-client && n8n start

بمجرد تثبيت prom-client بشكل صريح في بيئة الحاوية، استدعاء عقدة Code const client = require(‘prom-client’) سيعمل بسلاسة مرة أخرى!

شكراً!

@Florian_Glappa هل يمكنك مشاركة إعدادك الكامل بما في ذلك كيفية تثبيت حزمة npm؟ هل تستخدم أيضًا مُشغّلات المهام (task runners) حيث قد يؤثر ذلك على الأمور؟

لم أقم بتثبيت حزمة npm، كما تقول المستندات، لأن n8n تستخدم الحزمة داخليًا، لقد قمت فقط بربط هذه الوظيفة باستخدام متغيري البيئة اللذين ذكرتهما في المنشور.

@Florian_Glappa للتأكد فقط، هل كانت النسخة 1.123.6 أو 1.123.60 قبل التحديث وهل تستخدم أداة تشغيل مهام خارجية؟

قد يكون من الممكن أن تمنع بعض خطوات التعزيز الأخيرة تحميل الحزمة.

كانت النسخة 1.123.6. لا أستخدم مُشغّلات المهام الخارجية.

@Florian_Glappa لقد قمت ببعض البحث ويبدو أنه توقف عن العمل في الإصدار 1.123.42 لكنه يعمل مرة أخرى في أحدث إصدار بيتا الحالي، لذلك قد يكون من الجدير القيام بتحديث v2 إن أمكن.

ومع ذلك، قمت بإنشاء N8N-10510 كتذكرة للمطورين لنرى أيضًا ما إذا كان بإمكاننا إصلاح هذه المشكلة.

شكراً جزيلاً على البحث في هذا الموضوع. يتطلب تحديث v2 بحثاً بشأن التغييرات التي تؤثر على التوافق، وهذا غير ممكن لنا حالياً. لذا ننتظر بفارغ الصبر N8N-10510 :slight_smile:

قد يكون من المفيد أن تضع في الاعتبار أن v1 سيصل إلى نهاية دعمه قبل نهاية السنة، لذا قد يكون من المفيد البدء في التخطيط لذلك.

بخصوص هذه المسألة… تم إنشاء fix(Code Node): External modules not working even when allowed in n8n version 1.x by RomanDavydchuk · Pull Request #34093 · n8n-io/n8n · GitHub لذا يجب أن يكون كل شيء على ما يرام قبل نهاية الأسبوع.

أرى أنه تم دمجه وإصداره بالفعل في الإصدار 1.123.66، وهذا رائع! للأسف، هناك صور Docker لـ amd و arm فقط من هذا الإصدار، وليس الصورة العامة. أعتقد أنني سأضطر إلى الانتظار لذلك؟

تم إصدار النسخة الجديدة n8n@1.123.66 التي تتضمن طلب الدمج في GitHub 34093.

لدينا الصورتان فقط منذ وقت طويل، أي منهما كنت تستخدم؟