Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Mod_WSGI在Apache后面重新加载CherryPy应用程序的源代码_Python_Apache2_Mod Wsgi_Reload_Cherrypy - Fatal编程技术网

Python 使用Mod_WSGI在Apache后面重新加载CherryPy应用程序的源代码

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

我正在使用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>
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,