我写了一个WSGI应用程序,我需要将它部署到服务器上,但是我得到的服务器已经安装了mod_python。
我不允许删除mod_python,因为已经有一些mod_python应用程序在它上面运行。
我考虑过的一个选择是在安装mod_python的同时安装mod_wsgi,但是我查阅了参考资料,发现这不是一个好主意。显然,mod_wsgi和mod_python不能很好地融合。
我考虑的另一个选择是安装mod_fastcgi并使用fastcgi部署它。
如果有人有更好的主意,不会破坏服务器上当前运行的mod_python应用程序,我很想听听。
发布于 2011-10-25 05:22:34
您可以同时使用mod_python和mod_wsgi,只要相同的Python版本和mod_python不链接到静态Python库即可。
在mod_python.so文件上运行'ldd‘命令:
ldd mod_python.so找出它是否链接到libpythonX.Y.so。构建mod_wsgi以使用相同的Python版本,确保它与相同的libpythonX.Y.so具有类似的链接。
更新
如果还加载了mod_python,则4.X版的mod_wsgi现在明确拒绝启动。为了同时使用mod_python和mod_wsgi,mod_wsgi的某些特性必须被削弱。由于mod_python现在非常老,没有进行有意义的更新,它有各种问题,不应该用于任何新的东西,不再试图支持它们一起使用。
发布于 2011-10-25 05:08:03
这里有一个想法(需要充实,但可能行不通):
它使用的wsgiref.handlers.BaseHandler
以下是我将从以下内容开始:
from mod_python import apache
from wsgiref.handlers import BaseHandler
class MyWSGIHandler(BaseHandler):
def __init__(self, apachereq):
BaseHandler.__init__(self)
self.apachereq = apachereq
def _write(self, data):
self.apachereq.write(data)
# override the other required methods of BaseHandler, see
# http://docs.python.org/library/wsgiref.html#wsgiref.handlers.BaseHandler
wsgi_app = create_your_wsgi_app()
def handler(req):
wsgi_handler = MyWSGIHandler(req)
wsgi_handler.run(wsgi_app)
return apache.OKIDEA 2(相当黑客风格):
您还可以在您的处理程序代码中使用werkzeug wsgi testing module将请求传递给WSGI应用程序,获取一个werkzeug响应,然后将该响应写入apache。
类似于:
from mod_python import apache
from werkzeug.test import Client
from werkzeug.wrappers import BaseResponse
wsgi_app = create_your_wsgi_app()
def handler(req):
c = Client(wsgi_app, BaseResponse)
resp = c.get(somehow_get_the_url_from(req)) # or c.post if it's a POST request
req.write(resp.data) # ... and find a way to write the headers as well
return apache.OK发布于 2011-10-25 04:45:35
最好的解决方案可能是使用mod_proxy并在不同的web服务器上运行Python web应用程序。
https://stackoverflow.com/questions/7881474
复制相似问题