調試模式:Django Docker Pycharm

PHPz
發布: 2024-09-07 14:02:02
原創
1184 人瀏覽過

Debug Mode: Django Docker Pycharm

讓本地設定正確調試您正在編寫的程式碼所花費的時間比任何開發人員都願意承認的要多。我們不要忘記,這主要是一個一次性完成的設置,所以如果我們不寫下來,我們就不會記得。這篇文章就是為了解決這個確切的問題! 將此作為如何啟動並運行本地開發環境的書面提醒。

先決條件:

  • PyCharm Professional(用於 Docker 支援)
  • Docker 和 Docker Compose
  • Django REST Framework (DRF) 應用程式

除了偵錯模式所需的更新之外,本文不會介紹有關 Django、Docker 或 Docker Composer 設定的詳細資訊。它假設您已經掌握瞭如何使該部件工作的實用知識。

第 1 步:用於調試的 Dockerfile 設定

將 Dockerfile 設定為在開發模式下運作並允許來自 PyCharm 偵錯器的連線。

下面是一個 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"]

登入後複製

有關此程式碼的注意事項

  • pydevd-pycharm 中的 241.17890.14==241.17890.14 會有所不同,取決於您擁有的 Pycharm 版本
  • 我們公開 8000(Web 伺服器連接埠)和 5679(偵錯器連接埠)以供外部存取。

第2步:Docker Compose配置

讓我們的 docker-compose.yml 檔案來配置 Web 服務(Django 應用程式)以及資料庫和其他服務。

這是一個範例 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}

登入後複製

讓我們進入程式碼分解

  • 我們正在為 Web 伺服器對應連接埠 8000,為 PyCharm 偵錯器對應連接埠 5679。
  • extra_hosts 確保您的 Docker 容器可以使用 host.docker.internal 與主機通訊。

步驟 3:設定 PyCharm 進行調試

  1. 建立 Python 偵錯伺服器設定:
  2. 在 PyCharm 中導覽至「執行 ➡️ 編輯配置」。
  3. 點擊 + 按鈕並選擇 Python 偵錯伺服器。
  4. 將主機設定為 0.0.0.0 或本機的 IP 位址。
  5. 將連接埠設定為 5679(或您在 Docker 設定中公開的連接埠)。
  6. 然後點選「儲存」!

  7. 啟動偵錯器伺服器:
    按一下「偵錯」按鈕(綠色錯誤圖示)啟動 PyCharm 偵錯器。這將開始偵聽我們設定的連接埠。

第四步:為Django新增遠端偵錯程式碼

在 Django 專案中,您需要在 manage.py 或 wsgi.py 中添加以下程式碼以連接到 PyCharm 偵錯器:

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 與我們先前揭露的連接埠相符。

第 5 步:運行 Docker 並調試

  1. 建置並運行 Docker: 執行以下命令來啟動容器:
docker-compose up --build
登入後複製

這將建立 Docker 映像並啟動服務,包括在開發模式下執行的 Django。

2。設定斷點:
在 PyCharm 中的 Django 程式碼中設定斷點。斷點應該會起作用,因為您的容器將連接到在連接埠 5679 上執行的 PyCharm 偵錯伺服器。

3。觸發您的程式碼:
現在,在 Django REST Framework API 中觸發任何 HTTP 請求。當程式碼到達斷點時,PyCharm 將暫停執行,讓您可以檢查目前狀態並單步執行程式碼。

第 6 步:故障排除

如果您在執行 Docker 時遇到錯誤“bind: address already in use”,則表示另一個進程已使用連接埠 5679。在這種情況下,您可以:

  • 停止 PyCharm 偵錯器並重新啟動 Docker。
  • 更改 docker-compose.yml 和 PyCharm 配置中的連接埠以避免衝突。

結論

這是我使用 PyCharm 強大的調試器在 Docker 容器內以開發模式運行 Django REST Framework 應用程式的設定。此設定可以幫助我透過在本地逐行調試程式碼來調試後端程式碼。

透過設定 Docker 容器與 PyCharm 通信,您可以簡化 Django 應用程式的編寫、測試和調試,從而更輕鬆地編寫程式碼!

祝你破解代碼愉快!

以上是調試模式:Django Docker Pycharm的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板