python - 使用 Mod_WSGI 在 Apache 后面重新加载 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=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 中运行时,很多事情都是为你完成的,看起来你不需要运行引擎。不对。您仍然应该至少运行它来处理信号、记录任何后台任务,以及可能将代码 Hook 到线程启动和停止中。在这种情况下,Autoreloader 依赖于正在运行的引擎。参见 http://docs.cherrypy.org/stable/concepts/engine.html有关 Engine 对象的更多信息和 http://tools.cherrypy.org/wiki/ModWSGI一些示例代码。

关于python - 使用 Mod_WSGI 在 Apache 后面重新加载 CherryPy 应用程序的源代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13837631/

相关文章:

python - Spark Python Pyspark 如何用字典数组和嵌入式字典展平列(sparknlp 注释器输出)

mod-rewrite - 通过请求的 URL 禁用 mod_security

mod-rewrite - Apache HTTPS 到 HTTPS 重定向

python - 手动停止由 mod_wsgi 启动的进程,并监控有多少进程正在运行

Django Webfaction 'Timeout when reading response headers from daemon process'

python - 使 View 代码显示模块源

python - 如何使用 python/numpy 计算百分位数?

python - 获取列表升序的索引

apache2 - 在 Windows 上安装 Apache 2.4 时出错 - 未以管理员身份登录

python - AWS Elastic Beanstalk mod_wsgi "compiled for"版本与 "runtime"版本不同