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.
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.
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
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
¡Y presiona Guardar!
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.
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.
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.
Si encuentra el error bind: dirección ya en uso mientras ejecuta Docker, otro proceso ya usa el puerto 5679. En este caso, puede:
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!
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