首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在mod_python上部署WSGI应用程序

在mod_python上部署WSGI应用程序
EN

Stack Overflow用户
提问于 2011-10-25 04:19:37
回答 4查看 1.1K关注 0票数 5

我写了一个WSGI应用程序,我需要将它部署到服务器上,但是我得到的服务器已经安装了mod_python。

我不允许删除mod_python,因为已经有一些mod_python应用程序在它上面运行。

我考虑过的一个选择是在安装mod_python的同时安装mod_wsgi,但是我查阅了参考资料,发现这不是一个好主意。显然,mod_wsgi和mod_python不能很好地融合。

我考虑的另一个选择是安装mod_fastcgi并使用fastcgi部署它。

如果有人有更好的主意,不会破坏服务器上当前运行的mod_python应用程序,我很想听听。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-10-25 05:22:34

您可以同时使用mod_python和mod_wsgi,只要相同的Python版本和mod_python不链接到静态Python库即可。

在mod_python.so文件上运行'ldd‘命令:

代码语言:javascript
复制
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现在非常老,没有进行有意义的更新,它有各种问题,不应该用于任何新的东西,不再试图支持它们一起使用。

票数 3
EN

Stack Overflow用户

发布于 2011-10-25 05:08:03

这里有一个想法(需要充实,但可能行不通):

它使用的wsgiref.handlers.BaseHandler

  • wsgiref是标准库subclass."

  • (the

  • 的一部分,它来自wsgiref的文档:“在尝试创建自定义的BaseHandler代码之前,您应该参考文档字符串和源代码以获取更多信息。下面的代码是mod_python handler modules )

以下是我将从以下内容开始:

代码语言:javascript
复制
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.OK

IDEA 2(相当黑客风格):

您还可以在您的处理程序代码中使用werkzeug wsgi testing module将请求传递给WSGI应用程序,获取一个werkzeug响应,然后将该响应写入apache。

类似于:

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2011-10-25 04:45:35

最好的解决方案可能是使用mod_proxy并在不同的web服务器上运行Python web应用程序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7881474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档