Pregunta

He creado una aplicación web.py, y ahora que está listo para ser desplegado, quiero correr en no en una función de servidor web de web.py. Quiero ser capaz de ejecutarlo en diferentes servidores web, Apache o IIS, sin tener que cambiar mi código de la aplicación. Aquí es donde se supone WSGI a entrar, si he entendido bien.
Sin embargo, no entiendo lo que exacly tengo que hacer para que mi despliegue de aplicaciones en un servidor WSGI? La mayoría de los ejemplos se supone que está utilizando los pilones / Django / otro-marco, en el que sólo tiene que ejecutar algún comando mágica que soluciona todo para usted.
Por lo que entiendo de la (muy breves) Documentación web.py, en lugar de correr web.application(...).run(), debería utilizar web.application(...).wsgifunc(). ¿Y entonces que?

¿Fue útil?

Solución

Exactamente lo que necesita hacer para alojarlo con un mecanismo de WSGI específica de alojamiento varía con el servidor.

En el caso de Apache / mod_wsgi y pasajeros Phusion, sólo tiene que proporcionar un archivo de script WSGI que contiene un objeto llamado 'aplicación'. Para web.py 0,2, este es el resultado de la llamada web.wsgifunc () con argumentos apropiados. Para web.py 0.3, en su lugar utiliza wsgifunc () función miembro de objeto devuelto por web.application (). Para ver detalles de estos documentos mod_wsgi:

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

Si por el contrario va a ser sometido a usar FastCGI, SCGI o adaptadores AJP para un servidor como Lighttpd, nginx o Cherokee, entonces es necesario utilizar el paquete 'flup' para proporcionar un puente entre las interfaces de lenguaje y agnósticos WSGI. Esto implica llamar a una función flup con el mismo objeto de aplicación WSGI por encima de que algo así mod_wsgi o Pasajeros Phusion utilizaría directamente sin la necesidad de un puente. Para más detalles de esta Sede:

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

Lo importante es estructurar su aplicación web para que sea en su propio auto contenida conjunto de módulos. Para trabajar con un servidor en particular, a continuación, crear un archivo de secuencia de comandos independiente si es necesario para tender un puente entre lo que requiere el servidor y el código de aplicación. El código de aplicación debe estar siempre fuera del directorio del servidor web y sólo el archivo de secuencia de comandos que actúa como puente sería en el directorio de documentos del servidor si es apropiado.

Otros consejos

Hasta el 21 de julio de 2009, hay una guía de instalación mucho más completa en el sitio de instalación webpy , que discute flup , fastcgi , Apache y más. Todavía no he intentado , pero parece que es mucho más detallada.

A continuación se muestra un ejemplo de dos aplicaciones de servidor con el servidor 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()
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top