我正在使用 mod_wsgi 在 Apache2 中提供 CherryPy 应用程序对象。从用户的角度来看,一切似乎都很好,这意味着他/她实际上可以访问应用程序并按预期使用它。但我面临的问题是由于新部署而发出代码更改的信号。
这是 Apache 中的应用程序配置:
WSGIDaemonProcess app-name user=someuser group=somegroup processes=4 maximum-requests=1000 inactivity-timeout=3600 umask=0007 python-path="path-to-sources:path-to-python-site-packages"
WSGIScriptAlias /app-url /location/of/wsgi/start/script/wsgi.py
<Directory "/location/or/sources">
WSGIProcessGroup somename
</Directory>
wsgi 启动脚本包含以下内容:
import sys
import root.index
sys.stdout = sys.stderr
application = root.index.get_wsgi_app()
#which return an object of cherrypy.Application
CherryPy 以“生产模式”运行,这意味着:
'engine.autoreload_on': False,
'checker.on': False,
'tools.log_headers.on': False,
'request.show_tracebacks': False,
'request.show_mismatched_params': False,
'log.screen': False,
之后我手动覆盖 engine.autoreload_on 并将其设置为 True 因为我希望应用程序接收代码更改并重新启动,但这并没有预期的影响。我知道触摸 wsgi 脚本文件或重新启动 Apache 应该会产生我想要的结果,但是 CherryPy 应该自己检测这些更改并相应地重新启动,就像在运行本地开发服务器时一样。据我所知,唯一的区别是我在本地调用cherrypy.tree.mount,而在生产中我调用cherrypy.Application。
底线:如何让我的生产应用程序接受代码更改并重新加载?