如何将 python rq worker 任务中的错误传播到 Sentry

How to propagate errors in python rq worker tasks to Sentry

我有一个带有 Sentry 错误跟踪功能的 Flask 应用程序。现在我用 rq 创建了一些任务,但它们的错误没有显示在 Sentry Issues 流中。我可以看出问题没有被过滤掉,因为过滤后的问题数量没有增加。错误显示在 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()])

我有什么问题吗,还是我应该设置一个完整的应用程序来确认这一点并发布错误报告?


另外,我有一个(有点偏的)问题:

我应该在应用本身的哨兵设置中包含 RqIntegrationRedisIntegration 吗?这些有什么好处?

非常感谢您的帮助


编辑 1:当我安排任务 my_app.nonexistent_module 时,工作人员正确地提出错误,该错误被哨兵捕获。
所以我可能会改变我的问题:how to propagate Exceptions in rq worker tasks to Sentry?

所以7个月后,我想通了。

Flask 应用使用应用工厂模式。然后在 worker 中,我需要像应用程序一样访问数据库,为此,我需要应用程序上下文。所以我from app_factory import create_app,然后create_app().app_context().push()。这就是问题所在——在工厂函数中,我还为应用程序本身初始化了哨兵,所以我最终将哨兵初始化了两次——一次是为应用程序,一次是为工作人员。结合我在工作任务文件(而不是配置)中调用应用程序初始化的事实,这可能会覆盖正确的哨兵初始化并阻止任务被正确记录