Gunicorn에서 실행되는 Flask 앱 디버깅
내 애플리케이션에 nginx / gunicorn 및 Flask를 사용하여 새로운 개발 플랫폼에서 작업하고 있습니다.
Ops-wise, 모든 것이 잘 작동합니다-내가 겪고있는 문제는 Flask 레이어를 디버깅하는 것입니다. 내 코드에 오류가있을 때 브라우저에 곧바로 500 오류가 반환되고 콘솔이나 로그에 아무것도 표시되지 않습니다.
나는 것 같아요 .. 여러 가지 CONFIGS / 옵션을 시도했습니다 있어야합니다 분명 뭔가 빠진합니다.
내 gunicorn.conf :
import os
bind = '127.0.0.1:8002'
workers = 3
backlog = 2048
worker_class = "sync"
debug = True
proc_name = 'gunicorn.proc'
pidfile = '/tmp/gunicorn.pid'
logfile = '/var/log/gunicorn/debug.log'
loglevel = 'debug'
일부 Flask 코드의 예 : testserver.py :
from flask import Flask
from flask import render_template_string
from werkzeug.contrib.fixers import ProxyFix
app = Flask(__name__)
@app.route('/')
def index():
n = 1/0
return "DIV/0 worked!"
마지막으로 gunicorn에서 플라스크 앱을 실행하는 명령 :
gunicorn -c gunicorn.conf.py testserver:app
감사합니다
수락 솔루션이 작동하지 않습니다.
Gunicorn은 pre-forking 환경이며 Flask 디버거는 forking 환경에서 작동하지 않습니다 .
주의
비록 인터랙티브 디버거가 forking 환경에서 작동하지 않더라도 (프로덕션 서버에서 사용하는 것이 거의 불가능하게 만듭니다) [...]
설정 하더라도을 실행하면 내부 서버 오류app.debug = True
메시지와 함께 빈 페이지 만 표시 됩니다 . gunicorn으로 할 수있는 최선의 방법은 . 그러면 내부 서버 오류 메시지 와 함께 추적이 제공 됩니다. 그러나 이것은 Flask 디버거가 아니라 터미널에 표시되는 것과 동일한 텍스트 추적입니다.gunicorn testserver:app
gunicorn --debug testserver:app
if __name__ ...
testserver.py에 섹션을 추가하고 python testserver.py
개발 중인 서버를 시작하기 위해 실행 하면 Flask 디버거가 제공됩니다. 즉, Flask 디버거를 원한다면 개발에 gunicorn을 사용하지 마십시오.
app = Flask(__name__)
app.config['DEBUG'] = True
if __name__ == '__main__':
app.run()
Heroku 사용자를위한 팁 :
개인적으로 나는 아직도 사용하려면 foreman start
, 대신 python testserver.py
이후 나를 위해 모든 ENV 변수를 설정합니다 . 이 작업을 수행하려면 :
내용 Procfile
web: bin/web
bin/web
, 파일의 내용은 프로젝트 루트에 상대적입니다.
#!/bin/sh
if [ "$FLASK_ENV" == "development" ]; then
python app.py
else
gunicorn app:app -w 3
fi
개발 .env
중에 다음 내용으로 프로젝트 루트에 상대적인 파일을 생성합니다 (문서는 여기 ).
FLASK_ENV=development
DEBUG=True
또한 프로덕션의 디버그 모드에서 Flask를 실행하지 않는 app.config['DEBUG']...
라인 으로 변경하는 것을 잊지 testserver.py
마십시오.
app.config['DEBUG'] = os.environ.get('DEBUG', False)
Flask 구성은 gunicorn과 완전히 별개입니다. 다음 설정 파일에 술병 문서 것은 좋은 솔루션이 내 소스를 변경할 것입니다 :
app = Flask(__name__)
app.config.from_pyfile('config.py')
그리고 config.py에서 :
DEBUG = True
Heroku 사용자 의 경우 Nick이 제안한 것처럼 bin / web 스크립트를 만드는 것보다 더 간단한 솔루션이 있습니다.
Instead of foreman start
, just use foreman run python app.py
if you want to debug your application in development.
Try setting the debug flag on the run command like so
gunicorn -c gunicorn.conf.py --debug testserver:app
and keep the DEBUG = True
in your Flask application. There must be a reason why your debug option is not being applied from the config file but for now the above note should get you going.
I had similiar problem when running flask under gunicorn I didn't see stacktraces in browser (had to look at logs every time). Setting DEBUG, FLASK_DEBUG, or anything mentioned on this page didn't work. Finally I did this:
app = Flask(__name__)
app.config.from_object(settings_map[environment])
if environment == 'development':
from werkzeug.debug import DebuggedApplication
app_runtime = DebuggedApplication(app, evalex=False)
else:
app_runtime = app
Note evalex is disabled because interactive debbugging won't work with forking (gunicorn).
참고URL : https://stackoverflow.com/questions/8950674/debugging-a-flask-app-running-in-gunicorn
'Program Tip' 카테고리의 다른 글
iOS 보이스 오버 상태 (0) | 2020.11.23 |
---|---|
컬러 맵을 사용하여 matplotlib에서 선 색상 설정 (0) | 2020.11.23 |
지수 백오 프로 셀러리 작업 재시도 (0) | 2020.11.23 |
MVC3 편집기 읽기 전용 (0) | 2020.11.23 |
Hashmap은 int, char에서 작동하지 않습니다. (0) | 2020.11.23 |