Рубрики
Без рубрики

Как сообщать об ошибках в веб-приложениях Flask с помощью Sentry

Узнайте, как использовать Sentry и интеграцию Flask, чтобы легко сообщать об ошибках в ваших веб-приложениях на Python.

Автор оригинала: Matt Makai.

Веб-приложения Flask легко настраиваются разработчиками благодаря расширению фреймворка архитектура, но эта гибкость иногда может привести к большему количеству ошибок при запуске приложения из-за острых углов между библиотеками.

Сообщение об ошибках имеет решающее значение для работы Flask Web. приложение, поэтому это руководство поможет вам добавить бесплатную базовую Конфигурация Sentry для нового проекта Flask.

Требования к руководству

Убедитесь, что у вас установлен Python 3, потому что Python 2 достиг своего истек срок службы в начале 2020 года и больше не поддерживается. Желательно, чтобы у вас было установлен Python 3.7 или выше в вашей среде разработки. В этом руководстве также будут использоваться:

Весь код в этом сообщении в блоге доступен с открытым исходным кодом по лицензии MIT. на GitHub в разделе каталог report-errors-flask-web-apps-sentry примеров кода блога репозиторий. Используйте исходный код по своему усмотрению для своих собственных проектов.

Настроена среда разработки

Перейдите в каталог, в котором вы храните свой Python виртуальные среды. Создайте новый virtualenv для этого проекта, используя следующие команда.

Установите библиотеки кода Flask и Sentry-SDK в новый Python виртуальная среда с помощью следующих команд:

python -m venv sentryflask
source sentryflask/bin/activate

pip install flask>=1.1.2 sentry-sdk[flask]==0.15.1

Обратите внимание, что мы установили интеграцию Flask как часть Sentry SDK, поэтому существует зависимость sentry-sdk [flask] , а не просто sentry-sdk .

Теперь, когда у нас установлены все наши зависимости, мы можем написать код небольшое приложение, чтобы показать, как работает отчет об ошибках.

Создание приложения

У нас есть все необходимое, чтобы начать сборку нашего приложения. Создайте новый каталог для вашего проекта. Я позвонил мне report-errors-flask-web-apps-sentry в репозитории примеров, но вы можете использовать более короткое имя, если вы предпочитаю. Откройте новый файл с именем app.py и напишите в нем следующий код.

# app.py
from flask import Flask, escape, request


app = Flask(__name__)


@app.route('/divide//by//')
def hello(numerator, denominator):
    answer = numerator / denominator
    return f'{numerator} can be divided by {denominator} {answer} times.'

Приведенный выше код представляет собой короткое приложение Flask, которое позволяет вводить данные через URL-адрес для два целых числа: числитель и знаменатель.

Сохраните файл и запустите его с помощью команды flask run :

env FLASK_APP=app.py flask run

Если вы видите следующий вывод в командной строке, это означает, что разработка сервер работает нормально:

* Serving Flask app "app.py"
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

Проверьте это, перейдя по адресу http://localhost: 5000/DivX/50/by/10/, и вы получите получите в браузере следующий результат:

Успешное деление 50 на 10.

Когда наше базовое приложение работает, теперь мы можем добавить отчеты об ошибках для ситуации, которые не работают должным образом.

Добавление Sentry в приложение Flask

Пришло время добавить в микс Sentry с интеграцией Flask, чтобы мы можно легко увидеть, когда возникают ошибки маршрута из-за неправильного ввода.

Sentry может быть самостоятельно размещенным или используется в качестве облачной службы через Sentry.io . В этом мы будем использовать облачную версию, потому что она быстрее, чем настройка собственного сервера, а также бесплатно для небольших проектов.

Перейдите на главную страницу Sentry.io .

Домашняя страница Sentry.io, на которой вы можете создать бесплатную учетную запись.

Войдите в свою учетную запись или зарегистрируйте новую бесплатную учетную запись. Вы будете в главная панель управления учетной записью после входа в систему или завершения знака Sentry вверх процесс.

На нашей панели управления учетной записью пока нет ошибок, как ожидается, потому что мы еще не подключили нашу учетную запись к нашему Python применение.

Пустая панель управления учетной записью Sentry.

Вы захотите создать новый проект Sentry Project только для этого приложения, чтобы нажмите «Проекты» на левой боковой панели, чтобы перейти на страницу «Проекты».

Кнопка для создания нового проекта Sentry.

На странице “Проекты” нажмите кнопку “Создать проект” в правом верхнем углу. угол страницы.

Создать новый проект Sentry.

Вы можете выбрать «Flask» или «Python». Я обычно просто выбираю “Python”, если я еще не знаю, какой фреймворк я буду использовать для создания своего применение. Затем дайте вашему новому проекту имя и нажмите кнопку «Создать Кнопка «Проект». Наш новый проект готов к интеграции с нашим кодом Python.

Нам нужен уникальный идентификатор для нашей учетной записи и проекта для авторизации нашего Код Python для отправки ошибок этому экземпляру Sentry. Самый простой способ получить нам нужно пойти в страница документации Python + Flask и прочтите, как настроить SDK.

В документации Sentry показано, что вам нужно экспортировать, чтобы подключиться к вашей учетной записи.

Скопируйте строковый параметр для метода init и установите его в качестве переменной среды вместо того, чтобы отображать его в коде вашего проекта.

export SENTRY_DSN='https://yourkeygoeshere.ingest.sentry.io/project-number'

Обязательно замените yourkeygoeshere своим уникальным идентификатором и “номер проекта” с идентификатором, который соответствует проекту, который вы только что создан.

Убедитесь, что SENTRY_DSN правильно установлен в вашей оболочке, используя echo команда:

echo $SENTRY_DSN

Обновите app.py , добавив следующие выделенные строки кода.

# app.py                                                                                                                                                                                
import os
import sentry_sdk
from flask import Flask, escape, request
from sentry_sdk.integrations.flask import FlaskIntegration


sentry_sdk.init(
    dsn=os.getenv('SENTRY_DSN'), integrations=[FlaskIntegration()]
)


app = Flask(__name__)


@app.route('/divide//by//')
def hello(numerator, denominator):
    answer = numerator / denominator
    return f'{numerator} can be divided by {denominator} {answer} times.'

Приведенные выше новые строки кода инициализируют клиента Sentry и позволяют ему правильно отправлять любые возникающие ошибки в нужную службу Sentry.

Тестирование интеграции Sentry

Панель управления Sentry показывает, что служба все еще ожидает событий.

Сторожевой приборной панели без отображения данных об ошибках.

Давайте сделаем ошибку, чтобы увидеть, правильно ли мы подключили интеграцию Flask с нашим приложением.

Попробуйте разделить на ноль, перейдя по адресу http://localhost: 5000/div/50/by/0/in ваш веб-браузер. Вы должны получить «Внутреннюю ошибку сервера».

Flask код состояния HTTP 500 для внутренней ошибки сервера.

Вернувшись на панель управления Sentry, ошибка появится в списке.

Сторожевой приборной панели, отображающей точное значение ZeroDivisionError.

Мы можем углубиться в ошибку, нажав на нее, и получить тонну дополнительной информации, не только о нашем приложении, но и о клиенте, посетившем сайт. Это удобно, если у вас есть проблема в определенном браузере или другом тип клиента при построении API.

ZeroDivisionError подробности об ошибке в пользовательском интерфейсе Sentry.

Теперь вы можете создать остальную часть вашего приложения Flask. зная, что все исключения будут отслеживаться в Sentry.

Что дальше?

Мы только что закончили создание приложения Flask, чтобы показать, как быстро размещается версию Sentry можно добавить в приложения, чтобы не потерять отслеживать ваши сообщения об ошибках.

Затем вы можете попробовать одно из этих руководств, чтобы добавить другие полезные функции в свой новое приложение:

  • Ответ на текстовые SMS-сообщения с помощью Python и Flask
  • Разработка и запуск приложений Flask в контейнерах Docker
  • Добавить аутентификацию Okta в существующее приложение Flask

Вы также можете определить, что кодировать дальше в своем проекте Python, прочитав страница содержания Full Stack Python.

Вопросов? Свяжитесь со мной через Twitter @fullstackpython или @mattmakai . Я также на GitHub с имя пользователя mattmakai .

Если вы видите проблему или ошибку в этом руководстве, пожалуйста, форк репозитория исходного кода на GitHub и отправьте запрос на перенос с исправлением.