使用PyCharm进行远程调试的Django运行在Gunicorn上

概述

我们将使用docker-compose构建Django的远程调试环境。执行服务器使用gunicorn,远程调试使用PyCharm的调试服务器。我们的目标是创建一个简单的视图函数,设置断点,并在执行时暂停。

在查询中发现了Qiita上有关于VS Code的文章。这篇文章是关于pycharm的版本。可以使用VS Code进行远程调试在Docker上运行的gunicorn + Django应用程序。

以下是有关环境的详细信息。

項目名詳細webサーバーnginx:1.17.7DBmariadb:10.1アプリケーションサーバーgunicorn:20.0.4フレームワークdjango:3.0デバッグ用IDEpycharm pro 2020.3

前提条件 tí

    • mac

 

    • docker for mac

 

    pycharm professional

目录结构

.
├── gunicorn
│   ├── src
│   ├── Dockerfile
│   └── requirements.txt
├── mariadb
│   ├── data
│   └── sql
│       └── init.sql
├── nginx
│   └── conf
│       └── app_nginx.conf
├── static
└── docker-compose.yml

我正在创建用于本次 Django 远程调试的存储库。
用于 Django 远程调试的存储库。

如果从Django的初始处理开始执行,则使用“init”分支。
远程调试环境设置完毕时,当前状态为“main”分支。
“main”(或“master”)分支已经创建了一个简单的视图函数,并且可以进行远程调试。
如果要从以下的Django初始状态开始执行,请使用“init”分支。

关于远程调试的方法

PyCharm提供了两种在远程进行调试的方法。
– 远程解释器
– 调试服务器
本次我们将使用调试服务器。
这种方式需要一个用于调试的Python模块,
因此需要将该模块添加到能运行gunicorn(Python)的Docker镜像中。

PyCharm 公式文件:使用远程 PyCharm 进行调试
https://pleiades.io/help/pycharm/remote-debugging-with-product.html

环境构建

将用于调试的模块添加到Docker映像中。

pydev004.png
pydev005.png

创建一个Django项目

在包含docker-compose.yml文件的目录中执行以下命令。
*项目名称为test_project。

docker-compose run gunicorn django-admin.py startproject test_project .

创建Django应用程序

在有docker-compose.yml文件的目录中执行以下命令。
※应用程序名称为test_app。

docker-compose run gunicorn python manage.py startapp test_app

更新 Django 项目设置文件

配置.py

# 自分のアプリを追加
INSTALLED_APPS = [
    'test_app.apps.TestAppConfig', # 追加した自分のアプリ
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

: 省略

# mariadb接続設定に変更
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'app',
        'USER': 'root',
        'PASSWORD': 'root',
        'HOST': 'app_mariadb',
        'PORT': '3306',
        'OPTIONS': {
            'charset': 'utf8mb4',
        },
    }
}

: 省略

# 言語を日本語
LANGUAGE_CODE = 'ja'

# タイムゾーン変更
TIME_ZONE = 'Asia/Tokyo'

项目的urls.py

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('test_app.urls')),
]

创建一个简单的 Django 视图函数

应用的urls.py

from django.urls import path, include
from . import views

app_name = 'test_app'

urlpatterns = [
    path('', views.index, name='index'),
]

视图.py

from django.shortcuts import render
from django.http import HttpResponse
from django.views.generic import TemplateView

def index(request):
    test = 100 # 意味のない行。ブレークポイント貼るために処理を記述
    return HttpResponse("test")

在PyCharm中创建”运行/调试配置”。

在PyCharm的”运行/调试配置”设置中,通过左上方的”+”按钮选择”Python远程调试”。为调试配置任意命名,并设置主机名和端口。

項目名設定値host namehost.docker.internalport57588

点击“路径映射”,并进行相应设置。

項目名設定値備考Localpathmacのsrcディレクトリのフルパス例: /Users/nosu/work/git/public/docker-gunicorn-django-example/gunicorn/srcRemote path57588port番号は適当です。他とぶつからなければ何でもいいと思います

在django启动时添加调试服务器处理

如果使用调试服务器,需要让PyCharm与调试目标进行通信,因此需要在源代码中添加相关代码。由于AppConfig类的ready方法只会在Django启动时执行一次,因此我们将在这里添加处理步骤。

apps.py => 应用程序.py

from django.apps import AppConfig


class TestAppConfig(AppConfig):
    name = 'test_app'

    def ready(self):
        import pydevd_pycharm
        pydevd_pycharm.settrace(
            'host.docker.internal', port=57588, stdoutToServer=True, stderrToServer=True, suspend=False)

pycharm公式文档:使用Python远程调试服务器配置进行远程调试
https://pleiades.io/help/pycharm/remote-debugging-with-product.html#remote-debug-config

开始远程调试

在PyCharm上开始调试服务器。

スクリーンショット 2021-02-07 18.03.18.png
pycharm側でデバッグ開始
↓
dockerコンテナを立ち上げ、gunicornがpycharmと通信

使用docker-compose启动Django等容器

在包含docker-compose.yml文件的目录中执行以下命令。

docker-compose up

在编写的view函数中添加断点。

スクリーンショット 2021-02-07 18.02.01.png

使用浏览器访问并进行远程调试。

为了执行view函数,请访问以下链接
http://localhost:8000/

スクリーンショット 2021-02-07 18.00.00.png

引用的文章

    • Django+Nginx+MySQLの開発環境をDockerで構築する

 

    • Python Djangoをnginx+gunicornで起動まで

 

    Djangoの環境をDocker化する(Docker + Django + Gunicorn + nginx)その3
广告
将在 10 秒后关闭
bannerAds