7

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

4

3 回答 3

6

使用特定的 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 服务器文档目录之外,并且只有充当网桥的脚本文件才会在服务器文档目录中(如果合适)。

于 2009-07-03T10:18:09.577 回答
0

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

于 2009-08-07T17:12:58.970 回答
0

下面是使用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()
于 2009-09-10T17:16:35.557 回答