@sentry/browser
@sentry/node
raven-js
raven-node
_ (غراب للعقدة) _4.4.1
سينتج عن رمز التقاط الحدث التالي خطأ في Sentry أثناء تحليل الحدث: Source code was not found for /.../index.js
const Sentry = require('@sentry/node');
Sentry.init({ dsn: 'https://5d29[...][email protected]/13[...]6' });
(async () => {
const sentryEvent = await Sentry.Parsers.parseError(new Error('Test'));
Sentry.captureEvent(sentryEvent);
})();
إليك كيف يبدو الحدث في Sentry:
هل يمكنك نشر رابط مباشر للحدث؟
(لقد فاتتك أيضًا بعض المسارات في لقطة شاشة تتبع المكدس التي قمت بإخفائها مسبقًا 😅)
هل هناك أي سبب محدد لعدم استخدامك Sentry.captureException
مباشرةً ، ولكنك تريد بدلاً من ذلك إنشاء الحدث الخاص بك؟
نعم ، هذا هو الحدث: https://sentry.io/share/issue/e2c8d20b66d2406cb32c540d87654b4a/ (تم تعديله قليلاً لعدم نشر رقم dsn الخاص بنا)
السبب ، لماذا أستخدم Sentry.captureEvent()
هو ما يلي: أنا أحتفظ بمكوِّن إضافي hapi -sentry ./index.js#L41-L67
guischdi السبب في حصولك على هذا الخطأ هو أن مسارات الملفات المحلية لا يمكن الوصول إليها من خلال الخوادم البعيدة.
يحاول Sentry جلب وحل /something/local/src/app.js
وقراءة الكود المصدري منه لتقديم تعيينات أخطاء أفضل (يعمل بنفس الطريقة مع ملفات sourcemap).
لتحميل ملفاتك ، يمكنك استخدام CLI https://docs.sentry.io/cli/ أو المكون الإضافي Webpack https://github.com/getsentry/sentry-webpack-plugin
فيما يلي بعض المستندات القديمة على خرائط المصدر ، ولكن المفهوم هو نفسه لـ SDK الجديد https://docs.sentry.io/clients/node/sourcemaps/ (كل هذا ينطبق بنفس الطريقة على مشكلتك الحالية).
هناك أيضًا تكامل موجود يمكنك استخدامه لإعادة كتابة المسارات في كل إطار https://github.com/getsentry/sentry-javascript/blob/master/packages/core/src/integrations/pluggable/rewriteframes.ts
لذلك على سبيل المثال:
Sentry.init({
dsn: "https://[email protected]/297378",
integrations: [new Sentry.Integrations.RewriteFrames()]
});
سيتم تغيير /something/local/src/app.js
إلى app:///app.js
( app:///
هي بادئتنا الداخلية) ، لذلك عندما تقوم بتحميل app.js
إلى عناصر إصدار الحارس ، ستتم قراءته بشكل صحيح بدون حاجة لجلب الملفات الخارجية.
ما عليك القيام به في الأساس هو:
release
في init
مكالمةأتمنى أن يوضح لك بعض الأشياء. لا تتردد في طلب أي شيء إذا كنت بحاجة إلى مزيد من المساعدة.
مرحباkamilogorek
شكرا لجوابك المفصل.
هل فهمت الأمر بشكل صحيح: الطريقة الشائعة للحصول على تتبع مكدس لتطبيق Node.js يظهر في Sentry هو تحميل ملفات كل إصدار عبر تكامل RewriteFrames أو يدويًا؟ إذا كان الأمر كذلك ، فكيف يتم عرض تتبع المكدس على captureException
/ catch-all ولا يتم تشغيل أي خطأ "لم يتم العثور على رمز المصدر".
لقد اختبرت كيفية إلقاء خطأ في node_modules
lib. يتم الإبلاغ عن الخطأ بشكل صحيح بما في ذلك شفرة المصدر حتى من lib. انظر https://sentry.io/share/issue/2b95ecb13ce24227b2184b2561e4f6e3/
فلماذا يعمل هذا مع captureException
ويفشل مع captureEvent
؟
guischdi هل يمكنك تجاوز الارتباط الكامل لكلا الحدثين؟ لا يمكن مشاركتها؟ يمكنني الوصول إليهم من خلال أذونات المسؤول.
أيضًا ، سأكون خارج المكتب لمدة 3 أسابيع قادمة ، لذا سأحاول العودة إلى هذا عندما أعود.
kamilogorek هل تقصد أنني بحاجة إلى تحميل مجلد node_modules
بالكامل لكل إصدار أيضًا؟ لماذا @sentry/node
عند التشغيل على الخادم وتوافر كل هذه المصادر ولا يمكنك تحميل الملفات المطلوبة بتقرير الخطأ؟
أؤكد أنه بعد تعيين تكامل الإطارات وتحميل node_modules
بالكامل يحل هذه المشكلة بالنسبة لي. لكن عملية تحميل الكثير من ملفات node_modules بطيئة للغاية.
أعتقد أن الحل لهذا هو إما:
.tar
من الإصدار بالكامل.js
و .map
ونشر وتحميل هذين الملفين فقط.أيضًا ، كنت أواجه مشكلة في خرائط المصدر التي أشارت إلى الملف الأصلي .ts
الذي لم يكن في حزمة node_modules
npm - https://github.com/prisma/graphql-middleware/issues/159
kamilogorek هل من أخبار عن هذا الموضوع؟
يمكنني أيضًا أن أؤكد أن إعادة كتابة الإطارات كان الحل بالنسبة لنا.
حالتنا مختلفة بعض الشيء ، كنا نحاول جعل خرائط المصادر تعمل ، لكن الملف المصغر كان دائمًا هو الملف الذي يستخدمه Sentry. بالنسبة للإصدار المقابل ، نقوم بتحميل ملفات مصغرة بالإضافة إلى خرائط المصادر المرتبطة. يبدو أن Sentry لم يعثر على خريطة المصدر ، وكان يتحول افتراضيًا إلى الملف المصغر (الذي لا يزال مستضافًا في نفس المسار من خرائط المصادر بالرغم من ذلك).
لقد أضفنا للتو new Integrations.RewriteFrames()
إلى مفتاح عمليات الدمج إلى Sentry's init ، وبدأ اختيار خرائط المصادر لكل إصدار جديد.
من الجيد معرفة أن تكامل RewriteFrames
وتحميل node_modules
يبدو أنه يحل المشكلة. لكن أولاً (كما ذكر @ mieszko4 بالفعل) ، فإن تحميل العديد من الملفات أمر مزعج للغاية. علاوة على ذلك ، كان اكتشافي الأولي ،
يتم عرض تتبع المكدس على
captureException
/ catch-all ولا يتم تشغيل أي خطأ "لم يتم العثور على رمز المصدر"
لذلك يبقى السؤال التالي مفتوحًا:
فلماذا يعمل هذا مع
captureException
ويفشل معcaptureEvent
؟
أو بتعبير أدق: يمكن للمرء ببساطة التقاط خطأ عبر captureException
بدون مشاكل ، ولكن من أجل الالتقاط عبر captureEvent
يلزم تحميل جميع الملفات ( RewriteFrames
أو التكامل يدويًا) لمنع خطأ "لم يتم العثور على رمز المصدر". هل هذا خطأ أم مقصود ،kamilogorek؟
guischdi آسف لمثل هذا الرد المتأخر. لقد فقدت المسار قليلا. هل يمكنك تحديث ذاكرتي بما يحدث هنا وتقديم بعض نماذج الأحداث؟
تضمين التغريدة
نعم مشكلتنا هي:
captureException
يعمل بشكل جيد ، حتى لو ألقى node_module
خطأ ؛ رؤية استثناء الاختبار هذاcaptureEvent
أعط الحراس: error encountered while processing this event: [...] Source code was not found
؛ انظر هذا الاختبارguischdi فقط للتأكيد ، هذا هو ملف العقدة الخام js أليس كذلك؟ لا حزمة ويب ولا تجميع ولا خرائط مصدر. ملف واحد فقط index.js
مع مكالمتين مختلفتين على خطوط مختلفة؟ هل يمكنك تقديم محتوى هذا الملف إن أمكن؟
تضمين التغريدة
نعم ، خام العقدة JS. ألق نظرة على المشكلة الثانية التي ربطتها أعلاه . تشاهد بالفعل جميع الأسطر الـ 13 الخاصة بـ index.js
هناك.
guischdi نحن نحقق في سبب https://sentry.io/settings/kamil-ogorek/projects/testing-project/
إنه تطبيق عقدة ، لذلك لا فائدة من القيام بذلك.
kamilogorek حسنًا ، لقد أوقفت إعداد "تمكين جلب مصدر جافا سكريبت" 1 error encountered while processing this event: [...] Source code was not found
(راجع هذه المشكلة )
غريب ، هذا يعمل معي بشكل جيد. على أي حال ، سنحاول التحقيق في سبب حدوث ذلك ، على الرغم من أنني لا أستطيع أن أعدك عندما يحدث ، حيث إنها ليست مشكلة كبيرة تمنع أي شيء من العمل. حسنا ابقي ملصقك!
kamilogorek أي أخبار عن هذا؟
بالنسبة لي ، يشير عرض المشكلة إلى أن الكود المصدري ينقصه بعض الملفات ، لكنها كلها موجودة ويمكن عرضها ضمن تتبع المكدس.
أنا أدير تطبيق Sentry مستضافًا ذاتيًا وأستخدم @sentry/node 5.4.3
ها هي الكود الخاص بي:
// file: <path>/code/cli
const Sentry = require('@sentry/node');
Sentry.init({ dsn: process.env.SENTRY_DSN });
function test () {
throw new Error('test');
}
test();
أتلقى هذا الخطأ أيضًا:
وهنا المكدس:
Error: test
File "<path>/code/cli", line 10, col 9, in test
throw new Error('test');
File "<path>/code/cli", line 13, col 1, in Object.<anonymous>
test();
File "internal/modules/cjs/loader.js", line 1063, col 30, in Module._compile
File "internal/modules/cjs/loader.js", line 1103, col 10, in Module._extensions..js
File "internal/modules/cjs/loader.js", line 914, col 32, in Module.load
File "internal/modules/cjs/loader.js", line 822, col 14, in Module._load
File "internal/modules/cjs/loader.js", line 1143, col 12, in Module.runMain
File "internal/main/run_main_module.js", line 16, col 11, in null.<anonymous>
أنا أيضًا أواجه هذه المشكلة Source code was not found
LukeXF هل يمكنك توفير رابط لحدث متأثر؟
السبب الذي يجعلك ترى سياق المصدر (أي الرمز أعلى وأسفل السطر المعني) على الرغم من حصولك على أخطاء "لا يمكن العثور على شفرة المصدر" هو أنه في SDK ، قبل إرسال الحدث ، قم بتسجيل هذه المعلومات كجزء من معالجة تتبع المكدس . الخطأ قادم من الخادم _also_ الذي يحاول ملء تلك المعلومات.
هذا خطأ من جانبنا ، لأننا في الواقع لا نتوقع منك تحميل node_modules
مع كل إصدار (لتطبيقات العقدة ؛ لتطبيقات المتصفح ، من المحتمل أن تقوم بتجميع / تصغير على أي حال). يجب إصلاحه عن طريق https://github.com/getsentry/sentry/pull/17538 ، والتي سيتم نشرها في غضون ساعات قليلة.
بمجرد وصول هذا الإصلاح ، هل يمكن لأي شخص قام بالتعليق هنا أن يخبرنا إذا كان لا يزال لديك مشاكل / أسئلة ، وما هي؟ يسعدني إعادة فتح هذا إذا لزم الأمر.
مرحباlobsterkatie
اختبرته مرة أخرى ، باستخدام المقتطف التالي (تم تجريده من الملف التمهيدي الحالي على npm):
const Sentry = require('@sentry/node');
Sentry.init({ dsn: process.env.DSN });
(async () => {
Sentry.captureException(new Error('Good bye'));
})();
لسوء الحظ ، ما زلنا نحصل على خطأ Source code was not found
على https://sentry.io/share/issue/0247fe07741c4e358089461f113cef42/
هل الإصلاح الذي قدمته بالأمس منتشر بالفعل؟
تم الاختبار أيضًا باستخدام الإصدار v4.xx الحالي (v4.6.6) والإصدار الأخير (v5.14.0) من @ sentry / node.
guischdi لم تقم بتحميل أي عناصر أثرية ، ولم تقم بتضمين إصدار في التكوين الخاص بك.
يرجى اتباع المستندات أولاً: https://docs.sentry.io/platforms/node/sourcemaps/
تضمين التغريدة
في SDK ، قبل أن نرسل الحدث ، نسجل هذه المعلومات كجزء من معالجة stacktrace. يأتي الخطأ من الخادم الذي يحاول أيضًا ملء تلك المعلومات.
هذا خطأ من جانبنا ، لأننا في الواقع لا نتوقع منك تحميل node_modules مع كل إصدار
إذا فهمت lobsterkatie في هذه النقطة (المقتبسة أعلاه) ، فلن أحتاج إلى تحميل الكود. في رابط المشكلة ، يمكنك رؤية كل سياق التعليمات البرمجية المصدر المطلوب لفهم المشكلة (في هذه الحالة ، كل التعليمات البرمجية المصدر للنص البرمجي). لذلك يبدو أن هذا تم تسجيله بشكل صحيح. لا أعتقد أنني بحاجة إلى تحميل / تقديم خرائط المصادر (كما يقترح الرابط الخاص بك) ، لأنه برنامج Node.js عادي غير مصغر.
أعتقد أن المشكلة الوحيدة المتبقية هي الخطأ الذي يتم عرضه على الرغم من عدم توفير السياق بشكل صحيح. يبدو أن الخادم لا يدرك أنه لا يحتاج إلى تحميلات إضافية من جانبي. (هل أفهم ذلك بشكل صحيح @ lobsterkatie ؟)
guischdi الملف الذي تبحث عنه من تطبيقك ، وليس من node_modules ، لذا لن يتم تطبيق التغيير الذي أجريته (لاستبعاد رمز الجهة الخارجية بنجاح أكبر) هنا.
السبب في أننا نحاول معالجة خرائط المصدر لتطبيقات العقدة هو أنه في حين أنه من الصحيح أن الكود من المحتمل جدًا أنه لم يتم تصغيره ، إلا أنه يمكن نسخه بسهولة (إذا كان مكتوبًا بخط مطبوع ، على سبيل المثال) ، ولذا فإننا نحتاج إلى مصدر خرائط لعرض الكود كما هو مكتوب بدلاً من إخراج بابل.
حسنًا ، هذا يبدو لي وكأنه خطأ في UX. في رأيي ، يجب أن يكون (على الأقل لمشاريع Node.js) تحذيرًا فقط ويجب ألا يقول Source code was not found
ولكن شيء مثل Source maps were not found
. كان هذا من شأنه أن يمنع حدوث مشكلة لها تاريخ لأكثر من عام ؛)
إذا كنت تريد ، يمكنك إعادة فتح هذه المشكلة كتقرير لمن يعمل في الواجهة الأمامية / جزء العرض ، أو اتركه مغلقًا وأبلغهم بسوء الفهم هذا. شكرا جزيلا لتوضيح هذا أخيرا!
التعليق الأكثر فائدة
حسنًا ، هذا يبدو لي وكأنه خطأ في UX. في رأيي ، يجب أن يكون (على الأقل لمشاريع Node.js) تحذيرًا فقط ويجب ألا يقول
Source code was not found
ولكن شيء مثلSource maps were not found
. كان هذا من شأنه أن يمنع حدوث مشكلة لها تاريخ لأكثر من عام ؛)إذا كنت تريد ، يمكنك إعادة فتح هذه المشكلة كتقرير لمن يعمل في الواجهة الأمامية / جزء العرض ، أو اتركه مغلقًا وأبلغهم بسوء الفهم هذا. شكرا جزيلا لتوضيح هذا أخيرا!