Я хочу иметь возможность отлаживать приложение Python (Django) с pdb
под uWSGI, и у меня в основном та же проблема, что и описанная здесь получение:
...
File "/usr/lib/python2.7/bdb.py", line 49, in trace_dispatch
return self.dispatch_line(frame)
File "/usr/lib/python2.7/bdb.py", line 68, in dispatch_line
if self.quitting: raise BdbQuit
BdbQuit
Разница в том, что у меня другая настройка uWSGI
, и кажется, что я не могу сделать от uWSGI
до honour-stdin
, как это предлагается в принятом ответе на вопрос выше.
Моя настройка следующая:
1) У меня системный процесс для запуска uWSGI в режиме Emperor
[Unit]
Description=uWSGI Emperor service
[Service]
ExecStart=/usr/local/bin/uwsgi --ini /etc/uwsgi/emperor.ini
Restart=always
KillSignal=SIGQUIT
Type=notify
NotifyAccess=all
[Install]
WantedBy=multi-user.target
2) /etc/uwsgi/emperor.ini
выглядит так:
[uwsgi]
emperor = /etc/uwsgi/sites
uid = www-data
gid = www-data
limit-as = 1024
logto = /tmp/uwsgi-emperor.log
# I've tried adding both honour-stdin
# and daemons-honour-stdin here
honour-stdin = true
daemons-honour-stdin = true
3) Пример конфигурации одного из сайтов uwsgi выглядит следующим образом:
#/etc/uwsgi/sites/testproject.ini
[uwsgi]
module = wsgi
chdir = /home/myuser/projects/testproject
home = /home/myuser/.virtualenvs/testproject
env = DJANGO_SETTINGS_MODULE=testproject.settings.dev
daemonize = /tmp/uwsgi-testproject.log
master = true
processes = 1
socket = /tmp/testproject-dev.sock
chmod-socket = 664
vacuum = true
# I've also tried adding both honour-stdin
# and daemons-honour-stdin here
honour-stdin = true
daemons-honour-stdin = true
4) Я не уверен, связано ли это с проблемой, но у меня также есть конфигурация nginx для обслуживания сайта, это выглядит так:
upstream app-testproject-dev {
server unix:///tmp/testproject-dev.sock;
}
server {
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
listen 80;
server_name dev.testproject.com;
location / {
uwsgi_pass app-testproject-dev;
include /etc/nginx/uwsgi_params;
}
}
В настоящее время временным решением является использование remote-pdb
в качестве альтернативы моему подходу, но мне интересно понять, в чем проблема в моей текущей конфигурации и как ее исправить.
ОБНОВЛЕНИЕ : Я только что понял, что даже если это сработает, возможно, я неправильно открываю свои файлы журналов, так что pdb
может ждать моего ввода. Сейчас я использую tail
, чтобы увидеть, что происходит с журналами, но не знаю, работает ли это с pdb
?
UPDATE2 : провел еще какое-то тестирование, попытался пропустить режим systemd
+ uwsgi emperor из уравнения, запустив самого демона с помощью:
sudo /usr/local/bin/uwsgi --ini /etc/uwsgi/sites/testproject.ini
я замечаю, что без daemonize = /tmp/uwsgi-testproject.log
в файле .ini
все работает нормально, но как только я его демонизирую, stdin
начинает указывать на /dev/null
(у меня есть honor-stdin и daemons-honor-stdin установлен в true). Я проверяю это с помощью
ls -l /proc/<proc_id>/fd/0