Domanda

Ho creato un applicazione web.py, e ora che è pronto per essere distribuito, voglio correre in non su di web.py built-in server web. Voglio essere in grado di girare su diversi server web, Apache o IIS, senza dover apportare modifiche al codice dell'applicazione. Questo è dove si suppone che WSGI di entrare, se ho capito bene.
Tuttavia, non capisco che cosa exacly devo fare per fare il mio schierabili applicazione su un server WSGI? La maggior parte dei esempi presuppongono l'utilizzo Piloni / Django / altra-quadro, sul quale è sufficiente eseguire un comando magica che risolve tutto per voi.
Da quello che ho capito della (abbastanza breve) la documentazione web.py, invece di correre web.application(...).run(), dovrei usare web.application(...).wsgifunc(). E poi cosa?

È stato utile?

Soluzione

Esattamente quello che devi fare per ospitare con un WSGI meccanismo specifico di hosting varia con il server.

Per il caso di Apache / mod_wsgi e Phusion passeggeri, è solo bisogno di fornire un file di script WSGI che contiene un oggetto chiamato 'applicazione'. Per web.py 0.2, questo è il risultato della chiamata web.wsgifunc () con argomenti appropriati. Per web.py 0.3, si utilizza invece wsgifunc () funzione membro dell'oggetto restituito da web.application (). Per i dettagli su queste vedere la documentazione mod_wsgi:

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

Se invece si trovano a dover utilizzare FastCGI, SCGI o adattatori AJP per un server, come Lighttpd, nginx o Cherokee, allora avete bisogno di usare il pacchetto 'flup' quello di fornire un ponte tra queste interfacce lingua agnostico e WSGI. Ciò comporta chiamare una funzione flup con lo stesso oggetto applicazione WSGI sopra che qualcosa di simile mod_wsgi o Phusion passeggero userebbe direttamente senza la necessità di un ponte. Per i dettagli di questa Sede:

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

La cosa importante è quello di strutturare l'applicazione web in modo che sia nel suo proprio sé conteneva insieme di moduli. Per lavorare con un determinato server, quindi creare un file di script separato se necessario per colmare tra ciò che server richiede e il codice dell'applicazione. Il codice dell'applicazione deve essere sempre al di fuori della directory del documento server web e solo il file di script che funge da ponte sarebbe nella directory documento server se. Appropriato

Altri suggerimenti

A partire dal 21 luglio 2009, non v'è una guida di installazione molto più completo a il webpy installazione sito , che discute flup , FastCGI , apache e altro ancora. Non ho ancora provato , ma sembra come se fosse molto più dettagliato.

Ecco un esempio di due applicazioni in hosting che utilizzano server di WSGI cherrypy:

#!/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()
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top