使用PyCharm进行远程调试的Django运行在Gunicorn上
概述
我们将使用docker-compose构建Django的远程调试环境。执行服务器使用gunicorn,远程调试使用PyCharm的调试服务器。我们的目标是创建一个简单的视图函数,设置断点,并在执行时暂停。
在查询中发现了Qiita上有关于VS Code的文章。这篇文章是关于pycharm的版本。可以使用VS Code进行远程调试在Docker上运行的gunicorn + Django应用程序。
以下是有关环境的详细信息。
前提条件 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映像中。
创建一个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远程调试”。为调试配置任意命名,并设置主机名和端口。
点击“路径映射”,并进行相应设置。
在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上开始调试服务器。
pycharm側でデバッグ開始
↓
dockerコンテナを立ち上げ、gunicornがpycharmと通信
使用docker-compose启动Django等容器
在包含docker-compose.yml文件的目录中执行以下命令。
docker-compose up
在编写的view函数中添加断点。
使用浏览器访问并进行远程调试。
为了执行view函数,请访问以下链接
http://localhost:8000/
引用的文章
-
- Django+Nginx+MySQLの開発環境をDockerで構築する
-
- Python Djangoをnginx+gunicornで起動まで
- Djangoの環境をDocker化する(Docker + Django + Gunicorn + nginx)その3