في الوقت الحالي ، لا يمكن تعطيل المكون الإضافي الحارس بسبب فشل تحميل الوحدة النمطية ngRaven.
في بيئة التطوير ، أستخدم ما يلي دون تقديم DSN
Raven.config (). install ()
لا يتم استدعاء رد الاتصال الذي يسجل موفر الغراب
Raven.addPlugin(function () {
angular.module('ngRaven', [])
.provider('Raven', RavenProvider)
.config(['$provide', ExceptionHandlerProvider]);
});
لأن وظيفة التثبيت لا تستدعي البرنامج المساعد الذي يثبت الوحدة
فشل isSetup () لأن globalServer فارغ
install: function() {
if (isSetup() && !isRavenInstalled) {
TraceKit.report.subscribe(handleStackInfo);
// Install all of the plugins
each(plugins, function(_, plugin) {
plugin();
});
isRavenInstalled = true;
}
return Raven;
},
ذات صلة بـ # 414 و # 413
Sijaodedfos - يمكنك التعليق على رقم 414؟ مثل ، هل ستعالج العلاقات العامة هذه المشكلة؟
يبدو benvinegar شرعيًا بالنسبة لي ، على الرغم من أنني يمكن أن أتخيل الحالة التي تريد أن يكون فيها مزود Raven
متاحًا ، حتى بدون استدعاء .config()
- مثل إعداد Raven.debug
flag على سبيل المثال
تلقيت طلبًا مشابهًا من benvinegar وأشار إلى أنه يمكنك استخدام:
Raven.config('your dsn', {
shouldSendCallback: function () {
return false;
}
}).install();
وهذا سوف يمنع ريفين من الإبلاغ. بدّل حالة return
إلى TRUE وسيبدأ الإبلاغ. على الأقل هذا ما قيل لي. نخطط لاستخدام هذا بالإضافة إلى أمر نشر sed
لقلب القيمة المنطقية في وقت النشر.
لقد فعلت شيئًا مشابهًا لما سبق للسماح بتثبيت () بنجاح ، ولتجنب إجراء أي طلبات http لإرسال الأخطاء فعليًا ( window.SERVER_FLAGS
هو كيف أمرر sentryURL الخاص بي من الواجهة الخلفية إلى الواجهة الأمامية).
if (!window.SERVER_FLAGS.sentryURL) {
// Never bother sending data to sentry
Raven.setShouldSendCallback(function() { return false });
// Allow Raven.install() to succeed
Raven.isSetup = function() {
return true;
}
}
Raven
.config(window.SERVER_FLAGS.sentryURL, {
release: window.SERVER_FLAGS.version,
debug: true,
})
.addPlugin(Raven.Plugins.Angular)
.install();
يبدو أن هذا يعمل بشكل جيد إلى حد ما ، ولا يزال يسمح لـ Raven بالركض ، لكنه ببساطة لا يقدم تقريرًا. أنا حقًا لا أحب الاضطرار إلى اختراق isSetup
لكن هذه الطريقة الوحيدة التي يمكنني أن أجد بها كانت طفيفة التوغل للحصول على ngRaven
تحميل.
للآخرين الذين يتعثرون في هذا
إذا كنت تستخدم webpack لبناء التطبيق الخاص بك ، فإنك تستخدم متغيرات البيئة لتكوين raven باستخدام المكون الإضافي للبيئة
https://webpack.js.org/plugins/environment-plugin/
على سبيل المثال
if (process.env.NODE_ENV === 'dev') {
Raven.setShouldSendCallback(() => { return false; });
Raven.isSetup = () => { return true; };
}
Raven
.config(process.env.RAVEN_DSN, {
debug: process.env.RAVEN_DEBUG,
})
.addPlugin(require('raven-js/plugins/angular'), angular)
.install();
isSetup هو الآن للقراءة فقط ، لذلك لم تعد الطريقة المذكورة أعلاه تعمل.
لقد وجدت الحل التالي ، والذي يبدو أنه يعمل ، على الرغم من عدم علمي بالسبب.
let isProduction = process.env.ENV === 'build'; // variable provided by webpack
Raven
.config('https://<key>@sentry.io/<project>', {
shouldSendCallback: function () {
return isProduction;
}
})
.install();
if (!isProduction) {
Raven.uninstall(); // this is necessary! for some reason
}
export class RavenErrorHandler implements ErrorHandler {
handleError(err: any): void {
console.error(err); // this still fires after uninstalling!!! it's because it's already listed as Angular provider
Raven.captureException(err)
}
}
لا يزال حلاً سيئًا لأنه يختطف جميع أخطائي ، لذا لا أعرف من أي سطر تم إلقاؤها. على الأقل أعتقد أنه ليس فظيعًا مثل عدم رؤيتهم على الإطلاق.
لقد استخدمت بهذه الطريقة. يبدو أنه يعمل بالنسبة لي
إذا (إنتاج البيئة) {
Raven.config ('https: //
.تثبيت()؛
}
وفي المزودين
الموفرون: [البيئة. الإنتاج؟ {توفير: ErrorHandler، useClass: RavenErrorHandler}: []، ... `
يرجى إعلامي إذا كنت أفعل أي شيء خطأ هنا.
تبدو جيدة بالنسبة لي. على ما يبدو ، تم الرد على المشكلة الأصلية هنا بالفعل ، لذا أغلق هذه المشكلة. لا تتردد في إعادة فتحه إذا كان لا يزال ذا صلة بأي شكل من الأشكال.
أكثر سهولة على "app.module.ts"
import {environment} from '../environments/environment';
...
providers: [
LocalStorageService,
EventLocalStorageService,
EventService,
ActionButtonService,
WeatherUndergroundWeatherService,
GeoLocationInfoService,
AppEventColorService,
// {provide: ErrorHandler, useClass: RavenErrorHandler}
{provide: ErrorHandler, useClass: environment.production ? RavenErrorHandler : ErrorHandler} // See here
],
و
.config('key', {
shouldSendCallback: function () {
return environment.production;
}
})
.install();
بهذه الطريقة يكون لديك رسائل localdev في وحدة التحكم الخاصة بك (وإلا فإن Sentry يأخذ بعضها) وفي الإنتاج تحصل على الرسائل التي تريدها
على الأقل في Chrome (لست متأكدًا من المتصفحات الأخرى) ، هناك طريقة أخرى لمنع Raven من "اختطاف" وحدة تحكم المطورين وهي Blackbox raven.js
:
https://gist.github.com/paulirish/c307a5a585ddbcc17242
https://developer.chrome.com/devtools/docs/blackboxing
وماذا عن الحارس؟ لا أستخدم Raven ، لدي Sentry وأريد تعطيله في بيئة التطوير على مضيفي المحلي.
https://dev.to/angular/tracking-errors-in-angular-with-sentry-4oo0 - ها هو
artuska ، يمكنك إما تقديم DSN فارغًا أو استخدام beforeSend
لإيقاف النقل.
Sentry.init({
dsn: process.env.development ? '' : 'your-real-dsn'
})
أو
Sentry.init({
dsn: 'your-real-dsn',
beforeSend(event) {
if (process.env.development) return null;
return event;
}
})
لا أعتقد أن هذا في الواقع يعطل الحارس. يتوقف فقط إذا كان من الإرسال
البيانات. لا يزال فتات الخبز يلف معظم القضايا السيئة
يوم الإثنين 9 ديسمبر 2019 الساعة 10:15 صباحًا Kamil Ogórek [email protected]
كتب:
artuska https://github.com/artuska يمكنك إما تقديم DSN فارغة أو
استخدم قبل الإرسال لوقف النقل.Sentry.init ({
dsn: process.env.development؟ ":" your-real-dsn "
})أو
Sentry.init ({
dsn: "your-real-dsn" ،
beforeSend (الحدث) {
إذا كانت (process.env.development) ترجع خالية ؛
حدث العودة
}
})-
أنت تتلقى هذا لأنك علقت.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/getsentry/sentry-javascript/issues/436؟email_source=notifications&email_token=AAJVX45ZEIJWZSXZSBQ5ZQLQXYECDA5CNFSM4BW42VRKYY3PNVWWK3TUL52HS4DFVREXG43
أو إلغاء الاشتراك
https://github.com/notifications/unsubscribe-auth/AAJVX4YBWA3R6SM63NV5JPDQXYECDANCNFSM4BW42VRA
.
jimmykane صحيح ، إذا كنت تريد تعطيل Sentry ، فقط اتصل بـ init
بشروط
التعليق الأكثر فائدة
تلقيت طلبًا مشابهًا من benvinegar وأشار إلى أنه يمكنك استخدام:
وهذا سوف يمنع ريفين من الإبلاغ. بدّل حالة
return
إلى TRUE وسيبدأ الإبلاغ. على الأقل هذا ما قيل لي. نخطط لاستخدام هذا بالإضافة إلى أمر نشرsed
لقلب القيمة المنطقية في وقت النشر.