"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Modo de depuración: Django Docker Pycharm

Modo de depuración: Django Docker Pycharm

Publicado el 2024-11-06
Navegar:689

Debug Mode: Django Docker Pycharm

Conseguir que tu configuración local depure correctamente el código que estás escribiendo lleva más tiempo del que cualquier desarrollador quisiera admitir. Y no olvidemos que se trata principalmente de una configuración única, por lo que si no la anotamos, no la recordaremos. ¡Esta publicación está aquí para resolver ese problema exacto! Deje que esto le sirva como recordatorio escrito de cómo poner en funcionamiento su entorno de desarrollo local.

Requisitos previos:

  • PyCharm Professional (para compatibilidad con Docker)
  • Docker y Docker Compose
  • Aplicación Django REST Framework (DRF)

Esta publicación no cubrirá detalles sobre la configuración de Django, Docker o Docker Composer fuera de las actualizaciones necesarias para el modo de depuración. Se supone que ya tienes conocimientos prácticos sobre cómo hacer que esa pieza funcione.

Paso 1: Configuración de Dockerfile para depuración

Configura tu Dockerfile para que se ejecute en modo de desarrollo y permita conexiones desde el depurador PyCharm.

A continuación se muestra un Dockerfile de ejemplo:

# 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"]

Cosas a tener en cuenta sobre este código

  • 241.17890.14 en pydevd-pycharm==241.17890.14 será diferente dependiendo de la versión de Pycharm que tengas
  • Estamos exponiendo tanto 8000 (el puerto del servidor web) como 5679 (el puerto del depurador) para acceso externo.

Paso 2: Configuración de Docker Compose

Pongamos nuestro archivo docker-compose.yml para configurar el servicio web (aplicación Django) junto con la base de datos y otros servicios.

Aquí hay un ejemplo de 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}

Vayamos al desglose del código

  • Estamos asignando el puerto 8000 para el servidor web y el puerto 5679 para el depurador PyCharm.
  • extra_hosts garantiza que su contenedor Docker pueda comunicarse con la máquina host mediante host.docker.internal.

Paso 3: configurar PyCharm para la depuración

  1. Crear una configuración de servidor de depuración Python:
  2. En PyCharm, navegue hasta Ejecutar ➡️ Editar configuraciones.
  3. Haga clic en el botón y seleccione Python Debug Server.
  4. Configure el Host en 0.0.0.0 o la dirección IP de su máquina local.
  5. Establece el puerto en 5679 (o el que expongas en tu configuración de Docker).
  6. ¡Y presiona Guardar!

  7. Iniciar el servidor depurador:
    Inicie el depurador de PyCharm haciendo clic en el botón Depurar (icono de error verde). Esto comenzará a escuchar en el puerto que configuramos.

Paso 4: agregue código de depuración remota a Django

En su proyecto Django, deberá agregar el siguiente código en su Manage.py o wsgi.py para conectarse al depurador PyCharm:

import pydevd_pycharm

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

Este fragmento le indica a su aplicación Django que se conecte nuevamente al depurador PyCharm que se ejecuta en su máquina host. host.docker.internal se resuelve en la máquina host en Docker y el puerto=5679 coincide con el que expusimos anteriormente.

Paso 5: ejecute Docker y depure

  1. Construir y ejecutar Docker: Ejecute el siguiente comando para iniciar sus contenedores:
docker-compose up --build

Esto creará la imagen de Docker e iniciará los servicios, incluido Django ejecutándose en modo de desarrollo.

2. Establecer puntos de interrupción:
Establezca puntos de interrupción en su código Django dentro de PyCharm. Los puntos de interrupción deberían funcionar porque su contenedor se conectará al servidor de depuración PyCharm que se ejecuta en el puerto 5679.

3. Activa tu código:
Ahora, active cualquier solicitud HTTP en su API de Django REST Framework. Cuando el código llega al punto de interrupción, PyCharm pausará la ejecución, lo que le permitirá inspeccionar el estado actual y recorrer el código.

Paso 6: solución de problemas

Si encuentra el error bind: dirección ya en uso mientras ejecuta Docker, otro proceso ya usa el puerto 5679. En este caso, puede:

  • Detenga el depurador de PyCharm y reinicie Docker.
  • Cambie el puerto en su configuración de docker-compose.yml y PyCharm para evitar conflictos.

Conclusión

Esta es la configuración que uso para ejecutar mi aplicación Django REST Framework en modo de desarrollo dentro de un contenedor Docker usando el poderoso depurador de PyCharm. Esta configuración me ayuda a depurar mi código backend al recorrer el código línea por línea, todo localmente.

Al configurar su contenedor Docker para comunicarse con PyCharm, simplifica la escritura, prueba y depuración de su aplicación Django, ¡lo que facilita la escritura de código!

¡Diviértete descifrando tu código!

Declaración de liberación Este artículo se reproduce en: https://dev.to/techbychoiceorg/debug-mode-django-docker-pycharm-i8d?1 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3