You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Как запустить дебаггер в VSCode с Django и Docker Compose
Запуск напрямую через runserver
Переключитесь на панель Debug (слева кнопка с треугольником и жуком).
Под синей кнопкой выберите "create a launch.json file". Сверху выскочит панель, где нужно выбрать Python, затем Django, затем дописать путь до manage.py. В большинстве случаев это ${workspaceFolder}\backend\manage.py (первая часть - это корень всего проекта), но если у вас он лежит глубже, путь нужно поправить (здесь и далее).
Создастся файл launch.json с конфигурацией, которую можно поправить под себя. Например, мне нужно было указать другой порт для runserver (ключ "args") и переключить некоторые переменные окружения для запуска с другой БД (ключ "env"). Ещё стоит обратить внимание на ключ "justMyCode": если указать для него false, то дебаггером можно будет ходить по коду джанги и прочих либ.
Теперь в той же панели зеленый треугольник будет запускать выбранную конфигурацию. Можно ставить брейкпоинты и слать запросы на бек через Postman.
Запуск через Docker Compose
Чтобы дебаггер мог подключиться внутрь контейнера, аналогично создайте новую конфигурацию дебага через "Add configuration" в выпадающем списке в панели Debug либо через "create a launch.json file", если это первая ваша конфигурация. Выберите Python → Remote Attach → localhost → 5678. В созданной конфигурации поправьте пути в "pathMappings": корню проекта в контейнере ("remoteRoot": ".") должна соответствовать та же папка в проекте ("localRoot": "${workspaceFolder}\\backend").
Создайте ещё один конфиг для Docker Compose (docker-compose.debug.yml): он нужен, чтобы для контейнера с беком подменить команду запуска гуникорна и открыть порт 5678 для общения дебаггера с контейнерным runserver.
Скопируйте в него основной конфиг, но содержимое всех блоков контейнеров замените на конструкции, расширяющие основной конфиг. Это нужно, чтобы не дублировать настройки:
Для контейнера backend добавьте заклинание, запускающее вместо гуникорна runserver через дебаггер (взято из доков). Я убрал --wait-for-client, с ним бек не грузился, пока не подключался дебаггер. Обратите внимание, что порт 8000 здесь должен совпадать с портом гуникорна в Dockerfile.
Запустите весь оркестр, используя новый конфиг: docker compose -f docker-compose.debug.yml down && docker compose -f docker-compose.debug.yml up --build. Контейнер бека выдаст всякие предупреждения, но сайт должен быть уже доступен.
Запустите конфигурацию дебага из п.1 (Python: Remote Attach). Дебаггер готов. Можете расставлять брейкпоинты (если они не светятся красным, что-то не так с путями в "pathMappings") и заходить на страницы на сайте. При изменениях в коде придётся пересобирать контейнеры и заново подключаться.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters