我已经创建了一个web.py应用程序,现在已经可以部署了,我希望不在web.py的内置Web服务器上运行。我希望能够在不同的Web服务器,Apache或IIS上运行它,而无需更改我的应用程序代码。如果我理解正确的话,这就是WSGI应该进入的地方
但是,我不明白为了使我的应用程序可以在WSGI服务器上部署,我必须做些什么呢?大多数示例假设您正在使用Pylons / Django / other-framework,您只需运行一些魔法命令即可为您修复所有内容。
根据我对(非常简短的)web.py文档的理解,我应该使用web.application(...).run()
而不是运行web.application(...).wsgifunc()
。然后什么?
答案 0 :(得分:6)
使用特定的WSGI托管机制托管它的确切需要做的事情因服务器而异。
对于Apache / mod_wsgi和Phusion Passenger的情况,您只需要提供一个WSGI脚本文件,其中包含一个名为“application”的对象。对于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服务器文档目录之外,并且只有作为网桥的脚本文件才会在服务器文档目录中(如果适用)。
答案 1 :(得分:0)
截至2009年7月21日,the webpy install site有一个更全面的安装指南,讨论 flup , fastcgi , apache 等等。我还没有尝试它,但它似乎更详细。
答案 2 :(得分:0)
以下是使用cherrypy wsgi服务器的两个托管应用程序的示例:
#!/usr/bin/python from web import wsgiserver import web # webpy wsgi app urls = ( '/test.*', 'index' ) class index: def GET(self): web.header("content-type", "text/html") return "Hello, world1!" application = web.application(urls, globals(), autoreload=False).wsgifunc() # generic wsgi app def my_blog_app(environ, start_response): status = '200 OK' response_headers = [('Content-type','text/plain')] start_response(status, response_headers) return ['Hello world! - blog\n'] """ # single hosted app server = wsgiserver.CherryPyWSGIServer( ('0.0.0.0', 8070), application, server_name='www.cherrypy.example') """ # multiple hosted apps with WSGIPathInfoDispatcher d = wsgiserver.WSGIPathInfoDispatcher({'/test': application, '/blog': my_blog_app}) server = wsgiserver.CherryPyWSGIServer(('0.0.0.0', 8070), d) server.start()