web-dev-qa-db-ja.com

Flask最初の実行時:本番環境では開発サーバーを使用しないでください

FlaskプラグインをPyCharm Community Editionにインストールしました。この単純なコードをflask app:

from flask import Flask
app = Flask(__name__)

@app.route('/')
def index():
    return '<h1>Hello!</h1>'

if __name__ == "__main__":
    app.run(debug=True)

そして私はこのメッセージを受け取ります:

WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead

* Restarting with stat
* Debugger is active!
* Debugger PIN: 123-456-789
* Running on http://127.0.0.1:5000/

Flaskを実行するとこのエラーが発生するのはなぜですか?


以前のバージョンのメッセージには、「本番環境では開発サーバーを使用しないでください」と書かれていました。

44
Anatoly

開発モードで実行していることを開発サーバーに伝えない限り、本番環境で使用していると想定し、警告しないようにします。 開発サーバーは本番環境での使用を目的としたものではありません。特に効率的、安定、または安全になるように設計されていません。

FLASK_ENV環境変数をdevelopmentに設定して、開発モードを有効にします。

export FLASK_ENV=development
flask run

PyCharm(またはおそらく他のIDE)で実行している場合は、実行構成で環境変数を設定できます。

開発モードでは、デフォルトでデバッガーとリローダーが有効になります。これらが必要ない場合は、runコマンドに--no-debuggerまたは--no-reloaderを渡します。


ただし、この警告は単なる警告であり、アプリの実行を妨げるエラーではありません。アプリが機能していない場合は、コードに何か問題があります。

31
davidism

公式チュートリアルでは、アプリを本番環境にデプロイする方法について説明しています。 1つのオプションは、本番用WSGIサーバーであるウェイトレスを使用することです。その他のサーバーには、GunicornとuWSGIがあります。

開発ではなく公開で実行する場合は、組み込みの開発サーバー(_flask run_)を使用しないでください。開発サーバーは便宜上Werkzeugによって提供されますが、特に効率的、安定、または安全であるようには設計されていません。

代わりに、本番WSGIサーバーを使用してください。たとえば、ウェイトレスを使用するには、まず仮想環境にインストールします。

_$ pip install waitress
_

ウェイトレスにアプリケーションについて伝える必要がありますが、それは_FLASK_APP_を使用しませんflask runはそうします。アプリケーションを取得するには、アプリケーションファクトリをインポートして呼び出すように指示する必要がありますオブジェクト。

_$ waitress-serve --call 'flaskr:create_app'
Serving on http://0.0.0.0:8080
_

または、CLIコマンドを使用する代わりに、コードでwaitress.serve()を使用できます。

_from flask import Flask

app = Flask(__name__)

@app.route("/")
def index():
    return "<h1>Hello!</h1>"

if __name__ == "__main__":
    from waitress import serve
    serve(app, Host="0.0.0.0", port=8080)
_
_$ python hello.py
_
44
Yuchen Zhong