309

Python でまともな Web アプリを開発する方法を調査しています。高次構造に邪魔されたくないので、軽量のFlask フレームワークを選択しました。この選択が正しかったかどうかは時が経てばわかります。

これで、mod_wsgi を使用して Apache サーバーをセットアップし、テスト サイトは正常に動作しています。ただし、py ファイルまたはテンプレート ファイルを変更すると、サイトが自動的にリロードされるようにして、開発ルーチンをスピードアップしたいと考えています。サイトの .wsgi ファイルを変更すると (Apache 構成ファイルで WSGIScriptReloading On がなくても) リロードが発生することがわかりますが、それでも手動で処理する必要があります (つまり、余分な改行を挿入して保存します)。アプリの py ファイルの一部を編集するときにリロードを引き起こす方法はありますか? または、.wsgi ファイルを更新する IDE を使用する必要がありますか?

4

12 に答える 12

379

現在推奨されている方法は、flaskコマンド ライン ユーティリティを使用することです。

https://flask.palletsprojects.com/en/1.1.x/quickstart/#debug-mode

例:

$ export FLASK_APP=main.py
$ export FLASK_ENV=development
$ flask run

または1つのコマンドで:

$ FLASK_APP=main.py FLASK_ENV=development flask run

デフォルト ( ) 以外のポートが必要な場合は、オプション5000を追加し--portます。

例:

$ FLASK_APP=main.py FLASK_ENV=development flask run --port 8080

より多くのオプションが利用可能です:

$ flask run --help

FLASK_APPmodule:appまたはmodule:create_appの代わりに設定することもできますmodule.py。完全な説明については、https://flask.palletsprojects.com/en/1.1.x/cli/#application-discoveryを参照してください。

于 2016-10-20T09:36:07.490 に答える
271

テスト/開発環境について話している場合は、デバッグ オプションを使用してください。コードの変更が発生すると、フラスコアプリが自動リロードされます。

app.run(debug=True)

または、シェルから:

$ export FLASK_DEBUG=1
$ flask run

http://flask.pocoo.org/docs/quickstart/#debug-mode

于 2013-05-02T18:09:00.470 に答える
50

テスト/開発環境で

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 アプリケーションが新しくデプロイされたフラスコ アプリをリロードする原因となるファイル/フォルダーを指定できます。

たとえば、更新スクリプトは最新の変更を取得し、「reload_me.txt」ファイルに触れます。uWSGI ini スクリプト (これは Supervisord によって維持されます - 明らかに) のどこかに次の行があります。

touch-reload = '/opt/virtual_environments/application/reload_me.txt'

これが役立つことを願っています!

于 2013-05-04T11:20:54.083 に答える
25

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 サーバーでフラスコ アプリを実行するだけでは、不正なゲートウェイ エラーが発生します。

于 2013-11-06T23:35:30.933 に答える
1

ブラウザーでの高速自動変更を支援するには:

pip install livereload

from livereload import Server

if __name__ == '__main__':
    server = Server(app.wsgi_app)
    server.serve()

次に、サーバーを再起動します。

例えば。あなたの.pyファイルはapp.pyです

python app.py

于 2021-10-05T22:39:28.617 に答える