代码更改后自动重新加载python Flask应用程序
我正在研究如何用Python开发一个体面的Web应用程序。 由于我不想要一些高阶结构,所以我select了轻量级的Flask框架 。 时间会certificate这是否是正确的select。
所以,现在我已经build立了一个mod_wsgi的Apache服务器,我的testing网站运行良好。 不过,我希望通过使网站自动重新加载py或模板文件中的任何更改来加快开发过程。 我发现网站的.wsgi文件中的任何更改都会导致重新加载(即使在Apacheconfiguration文件中没有WSGIScriptReloading On),但是我仍然需要手动生成它(即插入额外的换行符,保存)。 有什么办法,当我编辑一些应用程序的py文件如何导致重新加载? 或者,我希望使用IDE来刷新.wsgi文件给我?
当前推荐的方式(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
或者用一个命令:
$ FLASK_APP=main.py FLASK_DEBUG=1 python -m flask run
我更喜欢python -m flask run
而不是flask run
因为前者也与virtualenv
。
如果你想要比默认的( 5000
)添加 – 端口选项不同的端口。
例:
$ python -m flask run --port 8080
更多选项可用于:
$ python -m flask run --help
如果您正在讨论testing/开发环境,那么只需使用debugging选项即可。 当代码改变发生时,它会自动重新加载烧瓶应用程序。
app.run(debug=True)
或者,从shell:
$ export FLASK_DEBUG=1 $ flask run
在testing/开发环境中
werkzeugdebugging器已经有一个“自动重新加载”function可以通过执行下列操作之一来启用:
app.run(debug=True)
要么
app.debug = True
如果需要,也可以使用单独的configuration文件来pipe理所有的设置。 例如,我使用'DEBUG = True'选项'settings.py'。 导入这个文件也很容易。
app.config.from_object('application.settings')
但是这不适合于生产环境。
生产环境
就我个人而言,我selectNginx + uWSGI通过Apache + mod_wsgi出于几个性能的原因,而且还有configuration选项。 触摸重新加载选项允许您指定一个文件/文件夹,这将导致uWSGI应用程序重新加载您新部署的应用程序。
例如,您的更新脚本会将您最新的更改拉下来,并触及“reload_me.txt”文件。 你的uWSGI ini脚本(显然是由Supervisord保持的)在这个脚本中有这样一行:
touch-reload = '/opt/virtual_environments/application/reload_me.txt'
我希望这有帮助!
如果你正在运行使用uwsgi看看python自动重载选项:
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
注意:这个例子也启用了debugging器。
我走这条路线来模仿生产尽可能与我的nginx设置。 简单地运行它的内置web服务器后面的nginx烧瓶应用程序将导致错误的网关错误。