代码更改后自动重新加载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 

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

在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烧瓶应用程序将导致错误的网关错误。