Faire en sorte que votre configuration locale débogue correctement le code que vous écrivez prend plus de temps que n'importe quel développeur ne voudrait l'admettre. Et n'oublions pas qu'il s'agit principalement d'une configuration unique, donc si nous ne l'écrivons pas, nous ne nous en souviendrons pas. Cet article est là pour résoudre exactement ce problème ! Laissez ceci servir de rappel écrit sur la façon de mettre en place et de faire fonctionner votre environnement de développement local.
Cet article ne couvrira pas les détails de la configuration de Django, Docker ou Docker Composer en dehors des mises à jour nécessaires au mode débogage. Cela suppose que vous avez déjà une connaissance pratique de la façon de faire fonctionner cette pièce.
Configurez votre Dockerfile pour qu'il s'exécute en mode développement et autorisez les connexions à partir du débogueur PyCharm.
Vous trouverez ci-dessous un exemple de 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"]
Ce qu'il faut garder à l'esprit à propos de ce code
Laissons notre fichier docker-compose.yml configurer le service Web (application Django) ainsi que la base de données et d'autres services.
Voici un exemple 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}
Passons à la répartition du code
Et cliquez sur Enregistrer !
Démarrez le serveur du débogueur :
Démarrez le débogueur PyCharm en cliquant sur le bouton Déboguer (icône de bug verte). Cela commencera à écouter sur le port que nous avons défini.
Dans votre projet Django, vous devrez ajouter le code suivant dans votre manage.py ou wsgi.py pour vous connecter au débogueur PyCharm :
import pydevd_pycharm # Connect to the PyCharm debug server pydevd_pycharm.settrace('host.docker.internal', port=5679, stdoutToServer=True, stderrToServer=True, suspend=False)
Cet extrait indique à votre application Django de se reconnecter au débogueur PyCharm exécuté sur votre machine hôte. host.docker.internal se résout en machine hôte dans Docker et port=5679 correspond à celui que nous avons exposé précédemment.
docker-compose up --build
Cela construira l'image Docker et démarrera les services, y compris Django exécuté en mode développement.
2. Définir des points d'arrêt :
Définissez des points d'arrêt dans votre code Django dans PyCharm. Les points d'arrêt devraient fonctionner car votre conteneur se connectera au serveur de débogage PyCharm exécuté sur le port 5679.
3. Déclenchez votre code :
Maintenant, déclenchez n’importe quelle requête HTTP dans votre API Django REST Framework. Lorsque le code atteint le point d'arrêt, PyCharm suspend l'exécution, vous permettant d'inspecter l'état actuel et de parcourir le code.
Si vous rencontrez l'erreur bind: adresse déjà utilisée lors de l'exécution de Docker, un autre processus utilise déjà le port 5679. Dans ce cas, vous pouvez :
C'est la configuration que j'utilise pour exécuter mon application Django REST Framework en mode développement dans un conteneur Docker à l'aide du puissant débogueur de PyCharm. Cette configuration m'aide à déboguer mon code backend en parcourant le code ligne par ligne, le tout localement.
En configurant votre conteneur Docker pour communiquer avec PyCharm, vous simplifiez l'écriture, les tests et le débogage de votre application Django, facilitant ainsi l'écriture de code !
Amusez-vous à casser votre code !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!