Sentryエラー追跡機能を備えたFlaskアプリがあります。ここで、を使用していくつかのタスクを作成しましたrq
が、それらのエラーはSentryIssuesストリームに表示されません。フィルタリングされた問題の数が増えないため、問題が除外されていないことがわかります。エラーはに表示されheroku logs --tail
ます。
私は労働者を rq worker homework-fetcher -c my_app.rq_sentry
my_app/rq_sentry.py
:
import os
import sentry_sdk
from sentry_sdk.integrations.rq import RqIntegration
dsn = os.environ["SENTRY_DSN"]
print(dsn) # I confirmed this appears in logs, so it is initialized
sentry_sdk.init(dsn=dsn, integrations=[RqIntegration()])
何か問題がありますか、それともこれを確認する完全なアプリをセットアップしてバグレポートを公開する必要がありますか?
また、私は(少しサイド-)質問があります:
アプリ自体の歩哨設定に含める必要がRqIntegration
ありRedisIntegration
ますか?これらの利点は何ですか?
助けてくれてありがとう
編集1:タスクをスケジュールするmy_app.nonexistent_module
と、ワーカーは正しくエラーを発生させますが、これは歩哨によって捕らえられます。
だから私は私の質問を変えるかもしれません:タスクの例外rq worker
をSentryに伝播する方法は?
それで7ヶ月後、私はそれを理解しました。
Flaskアプリは、アプリのファクトリパターンを使用します。次に、ワーカーで、アプリと同じ方法でデータベースにアクセスする必要があります。そのためには、アプリのコンテキストが必要です。だから私from app_factory import create_app
、そしてcreate_app().app_context().push()
。これが問題です。ファクトリ関数では、アプリ自体に対してSentryも初期化するため、Sentryが2回初期化されます。1回はアプリ用、もう1回はワーカー用です。ワーカータスクファイル(構成ではない)でアプリの初期化を呼び出したという事実と相まって、おそらく正しい歩哨の初期化をオーバーライドし、タスクが正しくログに記録されないようにしました
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加