Sentry с интеграцией с django бросает запрос KeyError
Я схожу с ума от этой проблемы, которая, как я полагаю, исходит от sentry-sdk для python, возможно, в сочетании с некоторыми другими зависимостями. У меня есть проект на Django 4.2 с sentry-sdk 2.13.0, который выбрасывает KeyError request
каждый раз, когда что-то срабатывает на sentry, то есть если сообщается об ошибке, я получаю еще X ошибок, о которых сообщается KeyError request
(да, это не просто 1 за каждый сделанный отчет).
Меня смущает то, что исходная ошибка корректно отображается на sentry, поэтому я не могу сказать, что sentry-sdk не сообщает о проблеме. Более того, это происходит всякий раз, когда я вручную запускаю отчет об информации/предупреждении из кода в sentry.
Обратите внимание, что это стало происходить после обновления зависимостей проекта, особенно Django до версии 4.2.
Я также подумал, что это может быть проблема с context_processor, но context_processor для запроса находится в настройках (см. код ниже)
Любая помощь или предложение будут высоко оценены.
Вот мои настройки для часового:
import sentry_sdk
from sentry_sdk.integrations.django import DjangoIntegration
sentry_sdk.init(
dsn="XXXX",
integrations=[DjangoIntegration()],
server_name='XXXX',
send_default_pii=True
)
А это трассировка стека для ошибки:
KeyError
'request'
django/template/context.py in __getitem__ at line 83
cms/templatetags/cms_tags.py in _get_empty_context at line 636
cms/templatetags/cms_tags.py in get_context at line 829
cms/templatetags/cms_tags.py in render_tag at line 810
classytags/core.py in render at line 142
django/template/base.py in render_annotated at line 966
django/template/base.py in render at line 1005
django/template/loader_tags.py in render at line 54
django/template/base.py in render_annotated at line 966
django/template/base.py in render at line 1005
django/template/base.py in _render at line 167
django/template/base.py in render at line 177
django/template/loader_tags.py in render at line 208
django/template/base.py in render_annotated at line 966
django/template/base.py in render at line 1005
django/template/loader_tags.py in render at line 63
django/template/base.py in render_annotated at line 966
django/template/base.py in render at line 1005
cms/templatetags/cms_tags.py in render_tag at line 426
classytags/core.py in render at line 142
django/template/base.py in render_annotated at line 966
django/template/base.py in render at line 1005
sekizai/templatetags/sekizai_tags.py in render_tag at line 86
classytags/core.py in render at line 142
django/template/base.py in render_annotated at line 966
django/template/base.py in render at line 1005
django/template/base.py in _render at line 167
django/template/loader_tags.py in render at line 157
django/template/base.py in render_annotated at line 966
django/template/base.py in render at line 1005
django/template/base.py in _render at line 167
django/template/loader_tags.py in render at line 157
django/template/base.py in render_annotated at line 966
django/template/base.py in render at line 1005
django/template/base.py in _render at line 167
django/template/base.py in render at line 175
django/template/backends/django.py in render at line 61
django/views/defaults.py in server_error at line 99
django/utils/decorators.py in _wrapper_view at line 134
django/core/handlers/exception.py in handle_uncaught_exception at line 185
django/core/handlers/exception.py in response_for_exception at line 140
django/core/handlers/exception.py in inner at line 57
django/utils/deprecation.py in __call__ at line 134
django/core/handlers/exception.py in inner at line 55
Определение процессоров контекста:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
...
],
'OPTIONS': {
'context_processors': [
'django.contrib.auth.context_processors.auth',
'django.template.context_processors.debug',
'django.template.context_processors.i18n',
'django.template.context_processors.media',
'django.template.context_processors.static',
'django.template.context_processors.tz',
'django.contrib.messages.context_processors.messages',
'django.template.context_processors.request',
'sekizai.context_processors.sekizai',
'cms.context_processors.cms_settings',
'website.context_processors.google_analytics'
],
'loaders': [
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
'admin_tools.template_loaders.Loader',
],
},
}
]
Если я попытаюсь воспроизвести исходную ошибку, которая вызвала все ошибки KeyErrors, не сообщая об этом с помощью sentry, я увижу только исходную ошибку и ни одной ошибки KeyError.
Я проверил stacktrace более подробно, но мне не удалось выяснить многого. Только то, что задействованы пакеты cms.
(не знаю, может ли это иметь значение, но я использую django-cms 3.11.6)
Глядя на трассировку стека, похоже, что что-то перезаписывает контекст шаблона. sentry-sdk
делает некоторые исправления шаблона, но если он затрагивает контекст, то, насколько я могу судить, он просто добавляет информацию о трассировке<<<5>>
Что вы можете сделать, чтобы сузить круг проблем:
- Попробуйте понизить отдельные зависимости до исходных версий, чтобы определить, какая именно из них стала вызывать проблему. Если вы догадываетесь, что дело в самом Django, то можно начать с этого. Как только вы узнаете, вы можете либо порыться в журнале изменений зависимости, либо поделиться этой информацией с разработчиками
sentry-sdk
, чтобы они могли взглянуть, если им нужно что-то подправить. Что приводит меня к следующему: - Подумайте об открытии проблемы в
sentry-sdk
репо - там разработчикам будет проще помочь с отладкой.