Python 使用Mod_WSGI在Apache后面重新加载CherryPy应用程序的源代码
我正在使用mod_wsgi在Apache2中为CherryPy应用程序对象提供服务。从用户的角度来看,一切似乎都很好,这意味着他/她实际上可以访问应用程序并按预期使用它。但我面临的问题是,由于新的部署,代码会发生变化 以下是Apache中的应用程序配置:Python 使用Mod_WSGI在Apache后面重新加载CherryPy应用程序的源代码,python,apache2,mod-wsgi,reload,cherrypy,Python,Apache2,Mod Wsgi,Reload,Cherrypy,我正在使用mod_wsgi在Apache2中为CherryPy应用程序对象提供服务。从用户的角度来看,一切似乎都很好,这意味着他/她实际上可以访问应用程序并按预期使用它。但我面临的问题是,由于新的部署,代码会发生变化 以下是Apache中的应用程序配置: WSGIDaemonProcess app-name user=someuser group=somegroup processes=4 maximum-requests=1000 inactivity-timeout=3600 umask=0
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>
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
一句话:如何让我的生产应用程序接受代码更改并重新加载?CherryPy与任何其他WSGI框架一样拥有请求处理程序(和WSGI应用程序)。但它也有一个引擎,可以处理请求本身之外发生的所有事情。当您独立运行时,其中包括大量的流程管理:PID、daemonization等。当您在Apache内部运行时,很多都是为您完成的,看起来您不需要运行引擎。不是真的。您仍然应该运行它,至少是为了处理信号,加上任何后台任务的日志记录,以及潜在地将代码挂接到线程的开始和停止。在这种情况下,自动阅读器依赖于运行的引擎。有关Engine对象的更多信息和一些示例代码,请参见。Cherrypy的wiki链接(我的示例基于该链接)指出,在高于3.0的Cherrypy版本上,不需要手动启动引擎。因此,我在运行3.2时没有这样做,所以我对这些信息感到有点困惑,我偶然发现了这样一条解释:您应该先从引擎中取消订阅服务器,然后再启动引擎。但问题是在哪里:在wsgi启动脚本中还是在应用程序源中?
'engine.autoreload_on': False,
'checker.on': False,
'tools.log_headers.on': False,
'request.show_tracebacks': False,
'request.show_mismatched_params': False,
'log.screen': False,