2009-07-03 29 views
6

我创建了一个web.py应用程序,现在它已准备好部署,我想运行在不在web.py的内置web服务器上。我希望能够在不同的webservers,Apache或IIS上运行它,而不必更改我的应用程序代码。如果我理解正确,这就是WSGI应该进入的地方。
但是,我不明白为了让我的应用程序可以在WSGI服务器上部署,我必须做些什么?大多数例子假设你使用的是Pylons/Django/other-framework,你只需运行一些魔术命令来修复所有的东西。
从我所了解的(非常简短的)web.py文档,而不是运行web.application(...).run(),我应该使用web.application(...).wsgifunc()。然后什么?使用WSGI部署一个Web.py应用程序,几台服务器

回答

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

反之,如果你不必使用FASTCGI,SCGI或AJP适配器的服务器,如lighttpd的,Nginx的或切诺基,那么你需要使用“flup”包在这些语言不可知的接口和WSGI之间提供一个桥梁。这涉及使用相同的WSGI应用程序对象调用flup函数,而不需要使用桥接器,而不需要类似mod_wsgi或Phusion Passenger那样的东西。对于这个显示的细节:

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

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

+0

好了,所以有做它没有一般的方式。可怜。我只需要写一堆适配器。 无论如何,谢谢! – carlpett 2009-07-06 13:25:52

0

截至2009年7月21日,有在the webpy install site一个更全面的安装指南中,讨论flupFastCGI的阿帕奇多。我还没有尝试它,但它似乎更详细。

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() 
相关问题