让您的本地设置正确调试您正在编写的代码所花费的时间比任何开发人员都愿意承认的要多。我们不要忘记,这主要是一个一次性完成的设置,所以如果我们不写下来,我们就不会记得。这篇文章就是为了解决这个确切的问题! 将此作为如何启动和运行本地开发环境的书面提醒。
除了调试模式所需的更新之外,本文不会介绍有关 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