私はnginx/gunicornとFlask=私のアプリケーションのために使用して新しい開発プラットフォームに取り組んできました。
残念ながら、すべてが正常に動作します-私が抱えている問題は、Flaskレイヤーをデバッグすることです。コードにエラーがある場合、ブラウザに500エラーが返されます。コンソールにもログにも何も表示されません。
私は多くの異なる設定/オプションを試しました。私はmust明らかな何かを見逃していると思います。
私の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 borks- 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でflaskアプリを実行するコマンド:
gunicorn -c gunicorn.conf.py testserver:app
ありがとう
Flask構成は、gunicornの構成とは完全に分離されています。設定ファイルに関するFlaskドキュメント に続いて 、良い解決策はソースをこれに変更することです:
app = Flask(__name__)
app.config.from_pyfile('config.py')
そしてconfig.pyで:
DEBUG = True
受け入れソリューションは私には機能しません。
Gunicornは分岐前の環境であり、明らかに Flaskデバッガは分岐環境では機能しません 。
注意
対話型デバッガーはフォーク環境では機能しませんが(実稼働サーバーでの使用はほぼ不可能です)[...]
app.debug = True
を設定した場合でも、gunicorn testserver:app
で実行すると、メッセージInternal Server Errorを含む空のページのみが表示されます。 gunicornでできることは、gunicorn --debug testserver:app
で実行することです。これにより、Internal Server Errorメッセージに加えてトレースが提供されます。ただし、これは端末に表示されるテキストトレースと同じであり、Flaskデバッガーではありません。
if __...
セクションをtestserver.pyに追加し、python testserver.py
を実行して開発中のサーバーを起動すると、Flaskデバッガー。言い換えれば、Flask=デバッガーが必要な場合、gunicornを開発に使用しないでください。
app = Flask(__name__)
app.config['DEBUG'] = True
if __== '__main__':
app.run()
個人的には、 これはすべてのenv変数を設定します なので、foreman start
の代わりにpython testserver.py
を使用したいです。これを機能させるには:
Procfile
の内容web: bin/web
bin/web
の内容、ファイルはプロジェクトルートに関連しています#!/bin/sh
if [ "$FLASK_ENV" == "development" ]; then
python app.py
else
gunicorn app:app -w 3
fi
.env
ファイルを次の内容で作成します(docs here )FLASK_ENV=development
DEBUG=True
また、app.config['DEBUG']...
のtestserver.py
行を、実稼働環境のデバッグモードでFlask=)を実行しないものに変更することを忘れないでください。
app.config['DEBUG'] = os.environ.get('DEBUG', False)
Herokuユーザーの場合、Nickが提案するようなbin/webスクリプトを作成するよりも簡単なソリューションがあります。
の代わりに foreman start
、使用するのはforeman run python app.py
開発中のアプリケーションをデバッグする場合。
実行コマンドでデバッグフラグを次のように設定してみてください
gunicorn -c gunicorn.conf.py --debug testserver:app
DEBUG = True
in Flask application。デバッグオプションが設定ファイルから適用されていないのには理由があるに違いありませんが、今のところは上記の注意事項で解決できます。
flaskをgunicornで実行すると、ブラウザでスタックトレースが表示されませんでした(毎回ログを表示する必要がありました)。最後にこれをやった:
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
対話型デバッグはフォーク(gunicorn)では機能しないため、evalexは無効になっています。