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;)

