Gunicorn Джанго Отладки
Изначально у меня было приложение Django с включенным тестовым сервером. Чтобы отладить эту настройку, я могу просто добавить import pdb; pdb.set_trace()
в любом месте кода и иметь точку разрыва, которая бросает меня в интерактивный отладчик в терминале (в командной строке).
Недавно я перешел на gunicorn, чтобы получить некоторые преимущества perf. Как я могу получить подобное поведение при использовании этой установки Gunicorn? Я попытался установить настройки gunicorn с помощью debug=True
и daemon=False
, но это не работает.
У кого-нибудь есть решение, чтобы вот это?
5 ответов:
Чтобы запустить green unicorn в конфигурации обратного прокси (под nginx) в режиме отладчика / отладки, введите следующие настройки в PyCharm 's Run / Django / Edit configuration:
Конечно, используйте любой порт (вместо
7777
), на который вы настроили прокси-сервер nginx.
Хорошо, я недавно столкнулся с подобной проблемой. Я не смог применить решение @dudklein (я получаю ошибки ввода-вывода, когда отладчик пытается принять входные данные-ipdb, pdb и т. д.)
Я использовал удаленный Python debbuger - winpdb и это встроенная отладка.
Установите winpdb в virtualenv
pip install winpdb
Импорт и запуск встроенного отладчика в коде:
import rpdb2 rpdb2.start_embedded_debugger('pass')
Запустите gunicorn с -- timeout аргумент
gunicorn -t 3600 env:application
Запустите правильный просмотр с помощью браузера, например.
http://127.0.0.1:8000/your-view/
Подключение к встроенному отладчику с помощью winpdb:
winpdb -a /path/to/django/app/views.py
Он предложит вам ввести пароль (используйте тот, который вы установили в своем коде, в моем примере это "pass") и запустить хороший графический интерфейс с отладчиком.
Если вам нужен учебник для
winpdb
- Вот вы где .
Если вы можете запустить gunicorn, указывая на экземпляр
application
, который является экземпляром классаDebuggedApplication
из библиотекиwerkzeug
, Вы сможете установить точки останова с помощью отладчика werkzeug с помощьюimport ipdb; ipdb.set_trace()
прямо в вашем браузере.import django.core.handlers.wsgi from werkzeug.debug import DebuggedApplication application = django.core.handlers.wsgi.WSGIHandler() application = DebuggedApplication(application, evalex=True)
Убедитесь, что вы установили библиотеку werkzeug и ipdb, конечно. (
pip install werkzeug
иpip install ipdb
)
Теперь мне удалось использовать gunicron с djnago и ipdb.
Выполнить
python -m ipdb manage.py run_gunicorn --debug -t 3600
Я использую Django 1.4 и gunicorn 0.16.1. тогда вы можете нормально использовать
{Facebook пытается отладить приложение facebook, поэтому я не могу использовать build in development server, потому что facebook пытается использовать SSL, а dev-сервер просто не может ответить должным образомimport ipdb; ipdb.set_trace()
в коде. Нет необходимости в библиотекеwerkzeug
.Пока я искал решение, я нашел сообщение pdb: Using the Python debugger в Django , который предлагает запускать
python -m pdb manage.py runserver
все время. Хотя в этом нет необходимости с dev-сервером django, я решил попробовать его с gunicordn и ipdb, и это сработало.
Что я в конце концов сделал, так это запустил
Таким образом, вам нужно иметь 2 разных репозитория в одной машине, один из которых является LIVE production build (один работаетpython manage.py runserver <your_external_IP>:8000
, когда я хочу использоватьpdb
.gunicorn
), а другой-тестовая сборка, которую мне нужно отладить там, где я используюpdb
. Когда на тестовой сборке все кажется стабильным, я объединяюTEST branch
сLIVE branch
. Никакое развитие или изменения не происходят наLIVE branch
таким образом, я избегаю конфликтов слияния.Надеюсь, это поможет другим, кто зависим от
pdb
;)