讓您的本地設定正確調試您正在編寫的程式碼所花費的時間比任何開發人員都願意承認的要多。我們不要忘記,這主要是一個一次性完成的設置,所以如果我們不寫下來,我們就不會記得。這篇文章就是為了解決這個確切的問題! 將此作為如何啟動和運行本地開發環境的書面提醒。
除了調試模式所需的更新之外,本文不會介紹有關 Django、Docker 或 Docker Composer 設定的詳細資訊。它假設您已經了解如何使該部件工作。
將 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"]
有關此代碼的注意事項
讓我們的 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}
讓我們進入程式碼分解
然後點選儲存!
啟動調試器伺服器:
按一下「偵錯」按鈕(綠色錯誤圖示)啟動 PyCharm 偵錯器。這將開始偵聽我們設定的連接埠。
在您的 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 與我們先前公開的連接埠相符。
docker-compose up --build
這將建立 Docker 映像並啟動服務,包括在開發模式下運行的 Django。
2.設定斷點:
在 PyCharm 中的 Django 程式碼中設定斷點。斷點應該會起作用,因為您的容器將連接到在連接埠 5679 上執行的 PyCharm 偵錯伺服器。
3.觸發您的代碼:
現在,在 Django REST Framework API 中觸發任何 HTTP 請求。當程式碼到達斷點時,PyCharm 將暫停執行,讓您可以檢查目前狀態並單步執行程式碼。
如果在執行 Docker 時遇到錯誤“bind:位址已在使用”,則說明另一個程序已使用連接埠 5679。在這種情況下,您可以:
這是我使用 PyCharm 強大的調試器在 Docker 容器內以開發模式運行 Django REST Framework 應用程式的設定。此設定可以幫助我透過在本地逐行調試程式碼來調試後端程式碼。
透過設定 Docker 容器與 PyCharm 通信,您可以簡化 Django 應用程式的編寫、測試和調試,從而更輕鬆地編寫程式碼!
享受破解代碼的樂趣!
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3