2009-07-03 2 views
6

Ich habe eine web.py-Anwendung erstellt, und jetzt, da sie für die Bereitstellung bereit ist, möchte ich nicht auf dem integrierten web.py-Webserver ausgeführt werden. Ich möchte es auf verschiedenen Webservern, Apache oder IIS ausführen können, ohne meinen Anwendungscode ändern zu müssen. Hier sollte WSGI hereinkommen, wenn ich es richtig verstehe.
Allerdings verstehe ich nicht, was genau ich tun muss, um meine Anwendung auf einem WSGI-Server deploybar zu machen? Die meisten Beispiele nehmen an, dass Sie Pylons/Django/other-framework verwenden, auf dem Sie einfach einen magischen Befehl ausführen, der alles für Sie repariert.
Von dem, was ich von der (ziemlich kurzen) web.py Dokumentation verstehe, anstelle von web.application(...).run(), sollte ich web.application(...).wsgifunc() verwenden. Und dann was?Bereitstellen einer Web.py-Anwendung mit WSGI, mehrere Server

Antwort

6

Genau das, was Sie tun müssen, um es mit einem bestimmten WSGI-Hosting-Mechanismus zu hosten, hängt vom Server ab.

Für Apache/mod_wsgi und Phusion Passenger müssen Sie nur eine WSGI-Skriptdatei bereitstellen, die ein Objekt namens "application" enthält. Für web.py 0.2 ist dies das Ergebnis des Aufrufs von web.wsgifunc() mit entsprechenden Argumenten. Für web.py 0.3 verwenden Sie stattdessen die wsgifunc() -Memberfunktion des von web.application() zurückgegebenen Objekts. Einzelheiten zu diesen mod_wsgi Dokumentation:

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

Wenn Sie stattdessen FastCGI, SCGI oder AJP Adapter für einen Server wie Lighttpd, nginx oder Cherokee verwenden haben, dann müssen Sie ‚flup‘ Paket verwenden eine Brücke zwischen diesen sprachunabhängigen Schnittstellen und WSGI zu schlagen. Dies beinhaltet das Aufrufen einer Flup-Funktion mit demselben WSGI-Anwendungsobjekt über etwas, das mod_wsgi oder Phusion Passenger direkt verwenden würde, ohne dass eine Brücke benötigt wird. Einzelheiten zu diesem siehe:

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

Wichtig ist, Ihre Web-Anwendung so zu strukturieren, dass sie in ihrem eigenen selbst enthalten ist die Module festgelegt. Um mit einem bestimmten Server zu arbeiten, erstellen Sie nach Bedarf eine separate Skriptdatei, um zwischen dem, was dieser Server benötigt, und Ihrem Anwendungscode zu überbrücken. Ihr Anwendungscode sollte sich immer außerhalb des Dokumentordners des Webservers befinden und nur die Skriptdatei, die als Bridge fungiert, befindet sich gegebenenfalls im Verzeichnis des Serverdokuments.

+0

Ok, so gibt es keine allgemeine Art und Weise, es zu tun. Das Mitleid. Ich muss dann nur ein paar Adapter aufschreiben. Danke trotzdem! – carlpett

0

Ab 21. 2009, im Juli gibt es eine viel vollere Installationsanleitung bei the webpy install site, die flup, fastcgi, Apache und mehr diskutiert. Ich habe es noch nicht versucht es, aber es scheint, als wäre es viel detaillierter. Hier

0

ist ein Beispiel für zwei gehostete Anwendungen mit cherrypy wsgi Server:

 

#!/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() 
Verwandte Themen