Tente definir a saída como sem buffer:
-
na variável de ambiente do conjunto de arquivos .env:
PYTHONUNBUFFERED=True
-
ou execute com
-u
flag:python -u script.py
Eu corro heroku local
com o Procfile
:
web: start-nginx gunicorn -c gunicorn.conf.py app:app
start-nginx
faz algumas configurações do ambiente e termina com:
{ nginx --some-params & $@ ; }
a intenção é rodar ambos nginx e gunicorn lado a lado, e registrar tudo.
Funciona principalmente. O problema é que o traceback do Python é parcial - a linha introdutória "Traceback" e a primeira (inútil para depuração, biblioteca) chamada, cortada, por exemplo:
Traceback (most recent call last):
venv/lib/python3.4/site-packages/flask/app.py", line 1820, in wsgi_app
é tudo o que vejo, quando a saída correta de executar start-nginx gunicorn ...
diretamente:
Traceback (most recent call last):
File "/Users/ojf/project/venv/lib/python3.4/site-packages/flask/app.py", line 1820, in wsgi_app
response = self.make_response(self.handle_exception(e))
[25 more lines here]
AttributeError: [useful line]
Qual é a causa provável disso, e posso corrigi-lo registrando ou manipulando stdout | err de forma diferente? Ou isso é um bug em heroku-local
?
Eu também tentei (em vez de { a & b ; }
):
nohup nginx --some-params 1>/tmp/log 2>&1 & echo $! > /tmp/nginx.pid
nohup $@ 1>/tmp/log 2>&1 & echo $! > /tmp/guni.pid
tail -f /tmp/log
no script, com a única diferença sendo que heroku-local
parou de colorir a saída.
Tente definir a saída como sem buffer:
na variável de ambiente do conjunto de arquivos .env:
PYTHONUNBUFFERED=True
ou execute com -u
flag:
python -u script.py
Tags stdout logs heroku stderr io-redirection