【问题标题】:Deploying a Web.py application with WSGI, several servers使用 WSGI 部署 Web.py 应用程序,多台服务器
【发布时间】:2009-07-03 09:35:35
【问题描述】:

我已经创建了一个 web.py 应用程序,现在它已经准备好部署了,我不想在 web.py 的内置网络服务器上运行。我希望能够在不同的网络服务器、Apache 或 IIS 上运行它,而无需更改我的应用程序代码。如果我理解正确的话,这就是 WSGI 应该出现的地方。
但是,我不明白我必须做什么才能使我的应用程序可部署在 WSGI 服务器上?大多数示例假设您使用的是 Pylons/Django/other-framework,您只需在其上运行一些魔术命令即可为您修复所有问题。
根据我对(相当简短的)web.py 文档的理解,我应该使用web.application(...).wsgifunc(),而不是运行web.application(...).run()。然后什么?

【问题讨论】:

    标签: python wsgi web.py


    【解决方案1】:

    使用特定 WSGI 托管机制托管它所需的具体操作因服务器而异。

    对于 Apache/mod_wsgi 和 Phusion Passenger,您只需要提供一个 WSGI 脚本文件,其中包含一个名为“应用程序”的对象。对于 web.py 0.2,这是使用适当参数调用 web.wsgifunc() 的结果。对于 web.py 0.3,您改为使用 web.application() 返回的对象的 wsgifunc() 成员函数。有关这些的详细信息,请参阅 mod_wsgi 文档:

    http://code.google.com/p/modwsgi/wiki/IntegrationWithWebPy

    如果您不得不为 Lighttpd、nginx 或 Cherokee 等服务器使用 FASTCGI、SCGI 或 AJP 适配器,那么您需要使用“flup”包在这些语言无关接口和 WSGI 之间架起一座桥梁。这涉及使用上面相同的 WSGI 应用程序对象调用 Flup 函数,类似 mod_wsgi 或 Phusion Passenger 将直接使用而无需桥接。有关详细信息,请参阅:

    http://trac.saddi.com/flup/wiki/FlupServers

    重要的是构建您的 Web 应用程序,使其位于自己的自包含模块集中。要使用特定服务器,然后根据需要创建一个单独的脚本文件,以在该服务器所需的内容和您的应用程序代码之间建立桥梁。您的应用程序代码应始终位于 Web 服务器文档目录之外,并且只有充当网桥的脚本文件才会在服务器文档目录中(如果合适)。

    【讨论】:

    • 好的,所以没有通用的方法。遗憾。那我只需要写一堆适配器。还是谢谢!
    【解决方案2】:

    截至 2009 年 7 月 21 日,the webpy install site 有更完整的安装指南,其中讨论了 flupfastcgiapache 和更多的。我还没有尝试过它,但它似乎更详细。

    【讨论】:

      【解决方案3】:

      以下是使用cherrypy wsgi服务器的两个托管应用的示例:

      #!/usr/bin/python 从网络导入 wsgiserver 导入网页 # webpy wsgi 应用程序 网址 = ( '/test.*', '索引' ) 班级指数: 定义获取(自我): web.header(“内容类型”,“文本/html”) 返回“你好,world1!” 应用程序 = web.application(urls, globals(), autoreload=False).wsgifunc() # 通用 wsgi 应用程序 def my_blog_app(环境,start_response): 状态 = '200 OK' response_headers = [('Content-type','text/plain')] start_response(状态,response_headers) 返回['世界你好! - 博客\n'] """ # 单个托管应用 服务器 = wsgiserver.CherryPyWSGIServer( ('0.0.0.0', 8070), 应用程序, server_name='www.cherrypy.example') """ # 使用 WSGIPathInfoDispatcher 的多个托管应用程序 d = wsgiserver.WSGIPathInfoDispatcher({'/test': application, '/blog': my_blog_app}) 服务器 = wsgiserver.CherryPyWSGIServer(('0.0.0.0', 8070), d) server.start()

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-03-30
        • 2023-02-22
        • 1970-01-01
        • 2023-04-09
        • 2012-06-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多