Pythonを使用して適切なWebアプリを開発する方法を調査しています。いくつかの高次構造を邪魔したくないので、私の選択は軽量 Flaskフレームワーク でした。これが正しい選択であったかどうかは時間が経てばわかります。
したがって、mod_wsgiを使用してApacheサーバーをセットアップし、テストサイトは正常に動作しています。ただし、pyファイルまたはテンプレートファイルに変更が加えられたときにサイトを自動的にリロードすることにより、開発ルーチンを高速化したいと思います。サイトの.wsgiファイルを変更するとリロードが発生することがわかります(Apache構成ファイルにWSGIScriptReloading Onがなくても)が、手動で変更する必要があります(つまり、余分な改行を挿入して保存します)。アプリのpyファイルを編集するときにリロードを引き起こす方法はありますか?または、.wsgiファイルを更新するIDEを使用する必要がありますか?
現在推奨されている方法(Flask> = 0.11)は、flask
コマンドラインユーティリティを使用する方法です。
http://flask.pocoo.org/docs/0.11/server/
例:
$ export FLASK_APP=main.py
$ export FLASK_DEBUG=1
$ python -m flask run
または1つのコマンドで:
$ FLASK_APP=main.py FLASK_DEBUG=1 python -m flask run
前者はvirtualenv
でも動作するため、python -m flask run
よりもflask run
の方が好きです。
デフォルト(5000
)とは異なるポートが必要な場合は、--port
オプションを追加します。
例:
$ python -m flask run --port 8080
次のオプションを使用できます。
$ python -m flask run --help
Test/dev環境について話している場合は、デバッグオプションを使用してください。コードの変更が発生すると、flaskアプリを自動リロードします。
app.run(debug=True)
または、シェルから:
$ export FLASK_DEBUG=1
$ flask run
Werkzeugデバッガーには、既に次のいずれかを実行して有効にできる「自動再読み込み」機能があります。
app.run(debug=True)
または
app.debug = True
必要に応じて、個別の構成ファイルを使用してすべてのセットアップを管理することもできます。たとえば、「settings.py」と「DEBUG = True」オプションを使用します。このファイルのインポートも簡単です。
app.config.from_object('application.settings')
ただし、これは実稼働環境には適していません。
個人的には、いくつかのパフォーマンス上の理由と設定オプションのために、Apache + mod_wsgiよりもNginx + uWSGIを選択しました。 touch-reload オプションを使用すると、uWSGIアプリケーションが新しくデプロイされたflaskアプリをリロードするファイル/フォルダーを指定できます。
たとえば、更新スクリプトは最新の変更を取得し、「reload_me.txt」ファイルにタッチします。 uWSGI iniスクリプト(Supervisordが管理していることは明らかです)のどこかに次の行があります。
touch-reload = '/opt/virtual_environments/application/reload_me.txt'
これがお役に立てば幸いです!
Uwsgiを使用して実行している場合は、python auto reloadオプションを確認してください。
uwsgi --py-autoreload 1
例uwsgi-dev-example.ini:
[uwsgi]
socket = 127.0.0.1:5000
master = true
virtualenv = /Users/xxxx/.virtualenvs/sites_env
chdir = /Users/xxx/site_root
module = site_module:register_debug_server()
callable = app
uid = myuser
chmod-socket = 660
log-date = true
workers = 1
py-autoreload = 1
site_root/__ init__.py
def register_debug_server():
from werkzeug.debug import DebuggedApplication
app = Flask(__name__)
app.debug = True
app = DebuggedApplication(app, evalex=True)
return app
次に実行します:
uwsgi --ini uwsgi-dev-example.ini
注:この例では、デバッガーも有効にします。
私はこのルートで、nginxのセットアップで可能な限り近い生産を模倣しました。 nginxの背後にあるWebサーバーに組み込まれているflaskアプリを実行するだけで、ゲートウェイエラーが発生します。
Flask 1.0のいくつかの更新
ホットリロードの基本的なアプローチは次のとおりです。
$ export FLASK_APP=my_application
$ export FLASK_ENV=development
$ flask run
FLASK_ENV=development
を使用する必要があります(FLASK_DEBUG=1
ではありません)flask run --debugger
を実行して、オンになっていることを確認できます。FLASK_APP
ファイルがある場合、Flask CLIはFLASK_ENV
や.env
などを自動的に読み取ります ( python-dotenv
との統合により)PyCharmでこれを実現するには、「環境変数」セクションを次のように設定します。
PYTHONUNBUFFERED = 1; FLASK_DEBUG = 1
Flask '実行/デバッグ構成'