"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Modo de depuração: Django Docker Pycharm

Modo de depuração: Django Docker Pycharm

Publicado em 2024-11-06
Navegar:888

Debug Mode: Django Docker Pycharm

Fazer com que sua configuração local depure o código que você está escrevendo corretamente leva mais tempo do que qualquer desenvolvedor gostaria de admitir. E não vamos esquecer que esta é principalmente uma configuração pronta, então, se não anotarmos, não nos lembraremos. Este post está aqui para resolver exatamente esse problema! Deixe que isso sirva como um lembrete por escrito de como colocar seu ambiente de desenvolvimento local em funcionamento.

Pré-requisitos:

  • PyCharm Professional (para suporte Docker)
  • Docker e Docker Compose
  • Aplicativo Django REST Framework (DRF)

Esta postagem não cobrirá detalhes sobre a configuração do Django, Docker ou Docker Composer fora das atualizações necessárias para o modo de depuração. Presume-se que você já tenha um conhecimento prático de como fazer essa peça funcionar.

Etapa 1: configuração do Dockerfile para depuração

Configure seu Dockerfile para ser executado no modo dev e permita conexões do depurador PyCharm.

Abaixo está um exemplo 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"]

Coisas para ter em mente sobre este código

  • 241.17890.14 em pydevd-pycharm==241.17890.14 será diferente dependendo da versão do Pycharm que você possui
  • Estamos expondo 8000 (a porta do servidor web) e 5679 (a porta do depurador) para acesso externo.

Etapa 2: configuração do Docker Compose

Vamos pegar nosso arquivo docker-compose.yml para configurar o serviço web (aplicativo Django) junto com o banco de dados e outros serviços.

Aqui está um exemplo 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}

Vamos pular para a análise do código

  • Estamos mapeando a porta 8000 para o servidor web e a porta 5679 para o depurador PyCharm.
  • extra_hosts garante que seu contêiner Docker possa se comunicar com a máquina host usando host.docker.internal.

Etapa 3: configurar o PyCharm para depuração

  1. Crie uma configuração de servidor de depuração Python:
  2. No PyCharm navegue até Executar ➡️ Editar configurações.
  3. Clique no botão e selecione Servidor de depuração Python.
  4. Defina o Host como 0.0.0.0 ou o endereço IP da sua máquina local.
  5. Defina a porta como 5679 (ou aquela que você expõe na configuração do Docker).
  6. E clique em Salvar!

  7. Iniciar o servidor do depurador:
    Inicie o depurador PyCharm clicando no botão Debug (ícone de bug verde). Isso começará a escutar na porta que definimos.

Etapa 4: adicionar código de depuração remota ao Django

Em seu projeto Django, você precisará adicionar o seguinte código em seu manager.py ou wsgi.py para se conectar ao 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 snippet diz ao seu aplicativo Django para se conectar novamente ao depurador PyCharm em execução na sua máquina host. host.docker.internal resolve para a máquina host no Docker e port=5679 corresponde à que expusemos anteriormente.

Etapa 5: execute o Docker e depure

  1. Construir e executar o Docker: Execute o seguinte comando para iniciar seus contêineres:
docker-compose up --build

Isso construirá a imagem Docker e iniciará os serviços, incluindo Django rodando em modo de desenvolvimento.

2. Definir pontos de interrupção:
Defina pontos de interrupção em seu código Django no PyCharm. Os pontos de interrupção devem funcionar porque seu contêiner se conectará ao servidor de depuração PyCharm em execução na porta 5679.

3. Acione seu código:
Agora, acione qualquer solicitação HTTP em sua API REST Framework do Django. Quando o código atinge o ponto de interrupção, o PyCharm pausa a execução, permitindo que você inspecione o estado atual e percorra o código.

Etapa 6: solução de problemas

Se você encontrar o erro bind: address já em uso durante a execução do Docker, outro processo já usa a porta 5679. Nesse caso, você pode:

  • Pare o depurador PyCharm e reinicie o Docker.
  • Altere a porta na configuração docker-compose.yml e PyCharm para evitar conflitos.

Conclusão

Esta é a configuração que uso para executar meu aplicativo Django REST Framework em modo de desenvolvimento dentro de um contêiner Docker usando o poderoso depurador do PyCharm. Essa configuração me ajuda a depurar meu código de back-end percorrendo o código linha por linha, tudo localmente.

Ao configurar seu contêiner Docker para se comunicar com PyCharm, você simplifica a escrita, o teste e a depuração de seu aplicativo Django, tornando mais fácil escrever código!

Divirta-se decifrando seu código!

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/techbychoiceorg/debug-mode-django-docker-pycharm-i8d?1 Se houver alguma violação, entre em contato com [email protected] para excluí-la
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3