Sentry-javascript: تعطيل من أجل التنمية

تم إنشاؤها على ٣ مايو ٢٠١٣  ·  19تعليقات  ·  مصدر: getsentry/sentry-javascript

أواجه مشكلة في معرفة كيفية استعادة حدث window.onerror بعد تضمين Raven باعتباره تابعًا لـ AMD.

لا أرغب في استخدام Raven على الإطلاق أثناء التطوير ، لذلك أتصل فقط بـ config() / install() في وضع الإنتاج. ولكن في وضع dev ، لا يزال يتم طرح جميع الأخطاء بواسطة TraceKit.report() ... وهو أمر محبط للغاية لأن تتبع رقم الملف / السطر / المكدس لم يعد مفيدًا بعد الآن في أدوات تطوير المتصفح.

لقد حاولت الاتصال بـ uninstall() في وضع dev لكن ذلك لم يساعد. هل هناك سبب يجعلك ملزمًا بـ window.onerror بغض النظر عن ذلك بدلاً من القيام بذلك داخل config() أو install() ؟

التعليق الأكثر فائدة

بالنسبة لأولئك الذين يأتون إلى هنا ويحاولون اكتشاف ذلك ، فقد كان خيار تكوين فاتني في البداية shouldSendCallback :

import Raven from 'raven-js';

const env = 'prod';
const release = '12345';

Raven
  .config('https://<example>@sentry.io/1234', {
    environment: env,
    release: release,
    shouldSendCallback: () => {
      // Do your logic here...
      return ['prod', 'staging'].indexOf(env) !== -1;
    },
  })
  .install();

إذا كان shouldSendCallback هو false لن يتم الإبلاغ عن الحارس. لا حاجة لمنطق الإبلاغ الشرطي في التعليمات البرمجية الخاصة بك مع هذا 👍.

ال 19 كومينتر

وجدت حلاً ، لكنه ليس مثاليًا ...

كنت أحاول تعيين window.onerror = null يدويًا في وضع التطوير ، لكن حتى ذلك لم ينجح. كانت المشكلة أنني كنت require() ing Raven في وحدتين ، وفي كل مرة كان Raven يعيد الارتباط بـ window.onerror .

لذا ، بدلاً من ذلك ، توقفت عن استخدام noConflict() ، وقمت بتضمينه باعتباره تبعية عامة في تكوين needjs ، وقمت بإزالته باعتباره تبعية محلية من الوحدات النمطية الأخرى. سمح هذا بتعيين window.onerror = null بدون إعادة ربط Raven للحدث لاحقًا.

إصلاح فوضوي جدًا على الرغم من :(

adambiggs حل آخر هو إنشاء وحدة AMD مغلفة لـ Raven-js تقوم بإجراء استدعاء التكوين والتثبيت ، مما يعني أنك تستورد raven-js مرة واحدة فقط ، ولكن يمكنك استيراد الوحدة الخاصة بك عدة مرات ، afaik.

أعتقد أن هذا قد يكون مرتبطًا بـ: https://github.com/getsentry/raven-js/pull/109 و https://github.com/getsentry/raven-js/issues/91#issuecomment -15560074

لا ينبغي أن يكون هذا مناسبًا بعد الآن. لا يتم تغيير window.onerror حتى استدعاء install() ويتم استعادته عند الاتصال بـ uninstall() . اسمحوا لي أن أعرف إذا كانت هناك مشكلة أخرى.

mattrobenolt ، لقد قمت بالترقية إلى 1.1.11 ولا أتصل بـ install() وما زلت أواجه أخطاء معالجة الغراب.

bobbyrenwick هل يمكنك ربطني بشيء عام يُظهر حدوث ذلك؟

هل هناك حل لهذا؟ حتى عندما لا أتصل أبدًا بـ Raven.config() أو Raven.install() أو إذا اتصلت بـ Raven.config(false) ، يبدو أن معالجات jquery أو الخطأ لا تزال مثبتة. يبدو أن الحل الوحيد هو عدم تحميل Raven js في المقام الأول (وهو أقل من مثالي).

انظر: # 282 :)

هل تقدم # 282 كخلفية فقط؟ لا أرى أي حلول هناك.

نعم ، لأنه لا يوجد حل بعد.

إصلاحي الوحيد هو استخدام require() في كتلة if (يستخدم باقي الكود الآن import :(

هل هناك تحديث على هذا؟

أي تحديث؟ لا يزال لا يعمل بشكل صحيح.

تحرير: آسف لهجتي. كان يوم طويل.

ماذا تحاول أن تفعل؟ أنا أفعل هذا ، وهو ما يعمل بشكل جيد:

if (process.env.RAVEN_DSN) {
  require('raven-js').config(process.env.RAVEN_DSN, {
    environment: process.env.NODE_ENV,
  }).install();
}

حيث process.env.RAVEN_DSN هو DSN بالطبع ، والذي يتم تعيينه فقط عند البناء للبيئات التي أريد تشغيل Raven فيها ، عبر webpack.EnvironmentPlugin .

في نسختك ، من المستحيل إعداد Angular ErrorHandler بشكل مشروط. إما أن تقوم بإعداده في كل حالة ، ثم يبتلع أخطائك بغض النظر عن أي شيء ، أو لا تقوم بإدراجها في الموفرين ، مما يتسبب في تعطل الوحدة بأكملها.

بقدر ما أعلم أنه من المستحيل استخدام أو عدم استخدام مزود Angular بناءً على شرط.

لقد أجريت العديد من التكرارات لمحاولات الإصلاح اليوم.

لأكون صادقًا ، هذا يبدو لي وكأنه قضية Angular وليس قضية Raven.

بعد قولي هذا ، أوافق على أن الحل الأكثر عمومية سيكون إضافة جيدة.

مجرد فكرة: هل حاولت تعيين نمط في الخيار ignoreUrls الذي يتطابق مع جميع عناوين URL؟ هل هذا ما تحتاجه؟ شيء من هذا القبيل ignoreUrls: [/./] ؟

أو ربما تعيين sampleRate إلى الصفر؟

من الممكن منع Raven من إرسال الطلبات وحتى من اكتشاف الأخطاء ، لكن هذا لا يمنع Angular ErrorHandler من ابتلاع الأخطاء (= على الأقل فقدان تتبع الخطوط الفعلية من حيث تم إلقاء الأخطاء).

أفترض أنك على حق وهي ليست مشكلة رافين بعد كل شيء.

بالنسبة لأولئك الذين يأتون إلى هنا ويحاولون اكتشاف ذلك ، فقد كان خيار تكوين فاتني في البداية shouldSendCallback :

import Raven from 'raven-js';

const env = 'prod';
const release = '12345';

Raven
  .config('https://<example>@sentry.io/1234', {
    environment: env,
    release: release,
    shouldSendCallback: () => {
      // Do your logic here...
      return ['prod', 'staging'].indexOf(env) !== -1;
    },
  })
  .install();

إذا كان shouldSendCallback هو false لن يتم الإبلاغ عن الحارس. لا حاجة لمنطق الإبلاغ الشرطي في التعليمات البرمجية الخاصة بك مع هذا 👍.

اجعل DSN الخاص بك سلسلة فارغة. سيتم تعطيل الإبلاغ

لقد استخدمت بهذه الطريقة. يبدو أنه يعمل بالنسبة لي

if (environment.production) { Raven.config('https://@sentry.io/') .install(); }

وفي المزودين
providers: [environment.production ? { provide: ErrorHandler, useClass: RavenErrorHandler } : [], ...

يرجى إعلامي إذا كنت أفعل أي شيء خطأ هنا.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات