작성 중인 코드를 제대로 디버그하기 위해 로컬 설정을 얻는 데는 개발자가 인정하는 것보다 더 많은 시간이 걸립니다. 그리고 이것은 대부분 일회성 설정이므로 기록하지 않으면 기억하지 못할 것이라는 점을 잊지 마십시오. 이 게시물은 정확한 문제를 해결하기 위해 여기에 있습니다! 이 내용을 로컬 개발 환경을 시작하고 실행하는 방법을 서면으로 상기시켜 주세요.
이 게시물에서는 디버그 모드에 필요한 업데이트 외에 Django, Docker 또는 Docker 작성기 설정에 대한 세부 정보를 다루지 않습니다. 이는 귀하가 해당 부분을 작동시키는 방법에 대한 실무 지식을 이미 가지고 있다고 가정합니다.
개발 모드에서 실행되고 PyCharm 디버거에서 연결을 허용하도록 Dockerfile을 설정합니다.
다음은 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"]
이 코드에 관해 유의할 사항
데이터베이스 및 기타 서비스와 함께 웹 서비스(Django 앱)를 구성하기 위해 docker-compose.yml 파일을 가져옵니다.
다음은 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}
코드 분석을 살펴보겠습니다.
그리고 저장을 누르세요!
디버거 서버 시작:
디버그 버튼(녹색 버그 아이콘)을 클릭하여 PyCharm 디버거를 시작합니다. 그러면 우리가 설정한 포트에서 수신이 시작됩니다.
Django 프로젝트에서 PyCharm 디버거에 연결하려면 Manage.py 또는 wsgi.py에 다음 코드를 추가해야 합니다.
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의 호스트 시스템으로 확인되며 port=5679는 이전에 노출한 것과 일치합니다.
docker-compose up --build
이렇게 하면 Docker 이미지가 빌드되고 개발 모드에서 실행되는 Django를 포함한 서비스가 시작됩니다.
2. 중단점 설정:
PyCharm 내에서 Django 코드에 중단점을 설정하세요. 컨테이너가 포트 5679에서 실행되는 PyCharm 디버그 서버에 연결되므로 중단점이 작동해야 합니다.
3. 코드 트리거:
이제 Django REST Framework API에서 HTTP 요청을 트리거하세요. 코드가 중단점에 도달하면 PyCharm이 실행을 일시 중지하여 현재 상태를 검사하고 코드를 단계별로 실행할 수 있습니다.
Docker를 실행하는 동안 바인딩: 주소가 이미 사용 중이라는 오류가 발생하면 다른 프로세스가 이미 포트 5679를 사용하고 있는 것입니다. 이 경우 다음을 수행할 수 있습니다.
이것은 PyCharm의 강력한 디버거를 사용하여 Docker 컨테이너 내부의 개발 모드에서 Django REST Framework 애플리케이션을 실행하는 데 사용하는 설정입니다. 이 설정은 코드를 한 줄씩 로컬에서 단계별로 실행하여 백엔드 코드를 디버깅하는 데 도움이 됩니다.
PyCharm과 통신하도록 Docker 컨테이너를 설정하면 Django 애플리케이션 작성, 테스트, 디버깅이 단순화되어 코드 작성이 더 쉬워집니다!
재미있게 코드를 해독해보세요!
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3