قمنا بالتحديث مؤخراً من 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. هل هذا تراجع أم تغيير في الإصدار؟
يمكنك تعديل أمر البدء على 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.
هذه المشكلة هي نتيجة جانبية لتحديثات حزم إعادة تجميع الاعتماديات والتعديلات الهيكلية الأخيرة في 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.42 لكنه يعمل مرة أخرى في أحدث إصدار بيتا الحالي، لذلك قد يكون من الجدير القيام بتحديث v2 إن أمكن.
ومع ذلك، قمت بإنشاء N8N-10510 كتذكرة للمطورين لنرى أيضًا ما إذا كان بإمكاننا إصلاح هذه المشكلة.
شكراً جزيلاً على البحث في هذا الموضوع. يتطلب تحديث v2 بحثاً بشأن التغييرات التي تؤثر على التوافق، وهذا غير ممكن لنا حالياً. لذا ننتظر بفارغ الصبر N8N-10510
أرى أنه تم دمجه وإصداره بالفعل في الإصدار 1.123.66، وهذا رائع! للأسف، هناك صور Docker لـ amd و arm فقط من هذا الإصدار، وليس الصورة العامة. أعتقد أنني سأضطر إلى الانتظار لذلك؟