RavenをAMDの依存関係として含めた後、 window.onerror
イベントを復元する方法を理解するのに問題があります。
開発中はRavenをまったく使用したくないので、本番モードではconfig()
/ install()
のみを呼び出します。 しかし、開発モードでは、すべてのエラーがTraceKit.report()
によってスローされます...これは、ファイル/行番号/スタックトレースがブラウザー開発ツールで役に立たなくなったため、かなりイライラします。
開発モードでuninstall()
を呼び出してみましたが、役に立ちませんでした。 config()
またはinstall()
内で行うのではなく、何があってもwindow.onerror
にバインドする理由はありますか?
解決策を見つけましたが、それは理想的ではありません...
手動で開発モードでwindow.onerror = null
を設定しようとしましたが、それでも機能しませんでした。 問題は、私がいくつかのモジュールでRavenをrequire()
していて、Ravenがwindow.onerror
に再バインドするたびに発生したことです。
そこで、代わりにnoConflict()
の使用をやめ、requirejs構成にグローバル依存関係として含め、他のモジュールからローカル依存関係として削除しました。 これにより、後でRavenがイベントを再バインドせずに、 window.onerror = null
を設定できました。
しかしかなり厄介な修正:(
@adambiggs別の解決策は、configure&install呼び出しを行うRaven-js用のラッピングAMDモジュールを作成することです。つまり、raven-jsを1回だけインポートしますが、独自のモジュールを複数回インポートできます。
これは、 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またはonerrorハンドラーはまだインストールされているようです。 唯一の回避策は、そもそもraven jsをロードしないようです(これは理想的とは言えません)。
参照:#282 :)
背景として#282を提供していますか? そこには回避策はありません。
はい、まだ解決策がないためです。
私の唯一の修正は、 if
ブロックでrequire()
を使用することです(私のコードの残りの部分は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であり、 webpack.EnvironmentPlugin
を介してRavenを実行する環境向けにビルドする場合にのみ設定されます。
お使いのバージョンでは、AngularErrorHandlerを条件付きで設定することはできません。 いずれの場合も設定してから、エラーを飲み込むか、プロバイダーにリストしないでください。これにより、oddevによってモジュール全体がクラッシュします。
私の知る限り、条件に基づいてAngularプロバイダーを使用することも使用しないことも不可能です。
今日、私は修正の試みを何度も繰り返しました。
正直なところ、それはレイヴンの問題ではなく、Angularの問題のように聞こえます。
そうは言っても、私はより一般的な解決策が良い追加になることに同意します。
考えてみてください。すべてのURLに一致するignoreUrls
オプションでパターンを設定してみましたか? それはあなたが必要なことをしますか? 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 } : [], ...
ここで何か間違ったことをしている場合はお知らせください。
最も参考になるコメント
それをまだ理解しようとしてここに来る人にとって、それは私が最初に逃した構成オプションでした
shouldSendCallback
:shouldSendCallback
がfalse
の場合、歩哨は報告しません。 これを使用すると、コードに条件付きレポートロジックは必要ありません👍。