繁体   English   中英

使用Mod_WSGI在Apache之后重新加载CherryPy应用程序的源

[英]Reloading sources of a CherryPy application behind Apache using Mod_WSGI

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

底线:如何让我的生产应用程序获取代码更改并重新加载?

CherryPy具有与其他任何WSGI框架一样的请求处理程序(和WSGI应用程序)。 但是它也有一个引擎 ,可以处理请求本身之外发生的所有事情。 当您独立运行时,其中包括许多过程管理:PID,守护进程等。当您在Apache内部运行时,许多工作已为您完成,并且看起来您不需要运行引擎。 不对。 您仍然至少应运行它以处理信号,并记录所有后台任务,并可能将代码挂接到线程的启动和停止中。 在这种情况下,自动重新加载器取决于运行中的引擎。 有关引擎对象的更多信息,请参见http://docs.cherrypy.org/stable/concepts/engine.html ;有关某些示例代码,请参见http://tools.cherrypy.org/wiki/ModWSGI

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM