2009-07-03 11 views
6

Stworzyłem aplikację web.py, a teraz, gdy jest ona gotowa do wdrożenia, chcę uruchomić nie na wbudowanym serwerze internetowym web.py. Chcę mieć możliwość uruchamiania go na różnych serwerach internetowych, Apache lub IIS, bez konieczności zmiany kodu aplikacji. Właśnie tam WSGI ma wejść, jeśli rozumiem to poprawnie.
Nie rozumiem jednak, co muszę zrobić, aby aplikacja mogła być wdrażana na serwerze WSGI? Większość przykładów zakłada, że ​​używasz Pylons/Django/other-framework, na którym po prostu uruchamiasz magiczne polecenie, które naprawia wszystko za Ciebie.
Z tego co rozumiem (dość krótka) dokumentacja web.py, zamiast uruchamiać web.application(...).run(), powinienem używać web.application(...).wsgifunc(). I co wtedy?Wdrażanie aplikacji Web.py z WSGI, kilka serwerów

Odpowiedz

6

Dokładnie to, co trzeba zrobić, aby hostować go z określonym mechanizmem hostingu WSGI różni się w zależności od serwera.

W przypadku Apache/mod_wsgi i Phusion Passenger wystarczy podać plik skryptu WSGI, który zawiera obiekt o nazwie "application". W przypadku web.py 0.2 jest to wynik wywołania web.wsgifunc() z odpowiednimi argumentami. W przypadku web.py 0.3 zamiast tego używasz funkcji wsgifunc() obiektu zwróconego przez web.application(). Dokładne informacje na nich zobaczyć mod_wsgi dokumentację:

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

Jeśli natomiast masz użyć FastCGI, SCGI lub AJP adaptery do serwera, takich jak Lighttpd, Nginx lub Cherokee, następnie trzeba użyć pakietu „flup” w celu zapewnienia mostu między tymi językowymi interfejsami agnostycznymi i WSGI. Obejmuje to wywoływanie funkcji flup z tym samym obiektem aplikacji WSGI powyżej, że coś takiego jak mod_wsgi lub Phusion Passenger użyje bezpośrednio bez potrzeby mostu. Szczegółowe informacje o tym przekonać:

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

Ważne jest to, aby uporządkować swoją aplikację internetową tak, że jest w jego własnym autonomiczny zestaw modułów. Aby pracować z określonym serwerem, utwórz w razie potrzeby oddzielny plik skryptu, aby uzyskać most między tym, czego ten serwer potrzebuje, a kodem aplikacji. Twój kod aplikacji powinien zawsze znajdować się poza katalogiem dokumentów serwera WWW, a tylko plik skryptu, który działa jak most, znajduje się w katalogu dokumentów serwera, jeśli jest to właściwe.

+0

Ok, więc nie ma ogólny sposób to zrobić. Szkoda. Będę musiał wtedy napisać kilka adapterów. Dzięki! – carlpett

0

Począwszy od 21 lipca 2009 roku, jest znacznie pełniejsze instrukcja instalacji na the webpy install site, który omawia flup, FastCGI, apache i więcej. Nie mam jeszcze wypróbowałem, ale wygląda na to, że jest bardziej szczegółowy.

0

Oto przykład dwóch hostowanych aplikacji wykorzystujących CherryPy serwer 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()