«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Режим отладки: Django Docker Pycharm

Режим отладки: Django Docker Pycharm

Опубликовано 6 ноября 2024 г.
Просматривать:394

Debug Mode: Django Docker Pycharm

Настройка локальной системы для правильной отладки кода, который вы пишете, занимает больше времени, чем хотелось бы признать любому разработчику. И давайте не будем забывать, что это по большей части одноразовая установка, поэтому, если мы ее не запишем, мы не запомним. Этот пост предназначен для решения именно этой проблемы! Пусть это послужит письменным напоминанием о том, как настроить и запустить локальную среду разработки.

Предпосылки:

  • PyCharm Professional (для поддержки Docker)
  • Docker и Docker Compose
  • Приложение Django REST Framework (DRF)

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

Шаг 1. Настройка Dockerfile для отладки

Настройте Dockerfile для запуска в режиме разработки и разрешите соединения из отладчика PyCharm.

Ниже приведен пример файла Dockerfile:

# Builder stage
FROM python:3.9-slim as builder

RUN chmod 1777 /tmp

# Install system dependencies
RUN apt-get update && apt-get install -y \
    libpq-dev \
    build-essential

WORKDIR /app

# Copy the requirements file into the container
COPY requirements.txt /app/
RUN pip install --no-cache-dir -r requirements.txt > pip_install.log

# Copy the current directory contents into the container
COPY . /app

# Collect static files
RUN python manage.py collectstatic --noinput

# Final stage
FROM python:3.9-slim

# Set environment variables
ENV PYTHONUNBUFFERED=1
ENV DJANGO_SETTINGS_MODULE=template.settings.development

# Set work directory
WORKDIR /app

# Copy files from the builder stage
COPY --from=builder /app /app

# Install pydevd-pycharm for remote debugging and gunicorn for serving
RUN pip install gunicorn pydevd-pycharm==241.17890.14 psycopg2-binary

# Expose necessary ports
EXPOSE 8000 5679  # Web app port and debug port

# Entry point for the container
ENTRYPOINT ["sh", "-c", "python manage.py runserver 0.0.0.0:8000"]

Что следует помнить об этом коде

  • 241.17890.14 в pydevd-pycharm==241.17890.14 будет отличаться в зависимости от вашей версии Pycharm
  • Мы предоставляем внешний доступ как 8000 (порт веб-сервера), так и 5679 (порт отладчика).

Шаг 2. Настройка Docker Compose

Давайте создадим наш файл docker-compose.yml для настройки веб-службы (приложения Django), а также базы данных и других служб.

Вот пример docker-compose.yml:

version: '3'

services:
  web:
    environment:
      - DJANGO_ENVIRONMENT=development
      - DB_HOST=host.docker.internal
    build:
      context: .
    command: >
      sh -c "python manage.py migrate &&
             python manage.py collectstatic --noinput &&
             python manage.py runserver 0.0.0.0:8000"
    volumes:
      - .:/app
    ports:
      - "8000:8000"   # Expose web port
      - "5679:5679"   # Expose debugger port
    extra_hosts:
      - "host.docker.internal:host-gateway"
  db:
    image: postgres:13
    environment:
      - POSTGRES_DB=${DB_NAME}
      - POSTGRES_USER=${DB_USER}
      - POSTGRES_PASSWORD=${DB_PASSWORD}

Давайте перейдем к разбору кода

  • Мы сопоставляем порт 8000 для веб-сервера и порт 5679 для отладчика PyCharm.
  • extra_hosts гарантирует, что ваш Docker-контейнер сможет взаимодействовать с хост-компьютером с помощью host.docker.internal.

Шаг 3. Настройте PyCharm для отладки

  1. Создание конфигурации сервера отладки Python:
  2. В PyCharm выберите «Выполнить» ➡️ «Редактировать конфигурации».
  3. Нажмите кнопку и выберите Сервер отладки Python.
  4. Установите для хоста значение 0.0.0.0 или IP-адрес вашего локального компьютера.
  5. Установите порт 5679 (или тот, который вы указали в настройках Docker).
  6. И нажмите «Сохранить»!

  7. Запустите сервер отладчика:
    Запустите отладчик PyCharm, нажав кнопку «Отладка» (зеленый значок ошибки). Начнется прослушивание установленного нами порта.

Шаг 4. Добавьте код удаленной отладки в Django

В вашем проекте Django вам нужно будет добавить следующий код в файл Manage.py или wsgi.py для подключения к отладчику PyCharm:

import pydevd_pycharm

# Connect to the PyCharm debug server
pydevd_pycharm.settrace('host.docker.internal', port=5679, stdoutToServer=True, stderrToServer=True, suspend=False)

Этот фрагмент сообщает вашему приложению Django, что ему необходимо снова подключиться к отладчику PyCharm, работающему на вашем хост-компьютере. host.docker.internal разрешается в хост-компьютер в Docker, а порт = 5679 соответствует тому, который мы указали ранее.

Шаг 5. Запустите Docker и выполните отладку

  1. Сборка и запуск Docker: Выполните следующую команду, чтобы запустить контейнеры:
docker-compose up --build

Это создаст образ Docker и запустит службы, включая Django, работающий в режиме разработки.

2. Установить точки останова:
Установите точки останова в своем коде Django в PyCharm. Точки останова должны работать, поскольку ваш контейнер будет подключаться к серверу отладки PyCharm, работающему через порт 5679.

3. Запустите свой код:
Теперь запустите любой HTTP-запрос в вашем API Django REST Framework. Когда код достигает точки останова, PyCharm приостановит выполнение, позволяя вам проверить текущее состояние и выполнить код.

Шаг 6. Устранение неполадок

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

  • Остановите отладчик PyCharm и перезапустите Docker.
  • Измените порт в конфигурации docker-compose.yml и PyCharm, чтобы избежать конфликтов.

Заключение

Это настройка, которую я использую для запуска приложения Django REST Framework в режиме разработки внутри контейнера Docker с использованием мощного отладчика PyCharm. Эта настройка помогает мне отлаживать мой серверный код, проходя его построчно, локально.

Настроив Docker-контейнер для взаимодействия с PyCharm, вы упростите написание, тестирование и отладку приложения Django, упрощая написание кода!

Удачи в взломе кода!

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/techbychoiceorg/debug-mode-django-docker-pycharm-i8d?1. Если обнаружено какое-либо нарушение прав, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3