簡體   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