He creado una aplicación web.py, y ahora que está lista para su implementación, deseo ejecutarla no en el servidor web incorporado de web.py. Quiero poder ejecutarlo en diferentes servidores web, Apache o IIS, sin tener que cambiar el código de mi aplicación. Aquí es donde se supone que WSGI debe entrar, si lo entiendo correctamente.
Sin embargo, no entiendo qué tengo que hacer para que mi aplicación pueda implementarse en un servidor WSGI. La mayoría de los ejemplos asumen que estás usando Pylons/Django/other-framework, en el que simplemente ejecutas un comando mágico que arregla todo para ti.
Por lo que entiendo de la (bastante breve) documentación de web.py, en lugar de ejecutar web.application(...).run()
, debería usar web.application(...).wsgifunc()
. ¿Y entonces que?Implementación de una aplicación Web.py con WSGI, varios servidores
Respuesta
Exactamente lo que necesita hacer para alojarlo con un mecanismo de alojamiento de WSGI específico varía con el servidor.
Para el caso de Apache/mod_wsgi y Phusion Passenger, solo necesita proporcionar un archivo de script WSGI que contenga un objeto llamado 'aplicación'. Para web.py 0.2, este es el resultado de llamar a web.wsgifunc() con argumentos apropiados. Para web.py 0.3, en su lugar utiliza la función de miembro wsgifunc() del objeto devuelto por web.application(). Para detalles de estos ver la documentación mod_wsgi:
http://code.google.com/p/modwsgi/wiki/IntegrationWithWebPy
Si por el contrario va a ser sometido a usar FastCGI, SCGI o AJP adaptadores para un servidor como Lighttpd, nginx o Cherokee, entonces es necesario utilizar el paquete 'flup' para proporcionar un puente entre esas interfaces independientes del lenguaje y WSGI. Esto implica invocar una función de volteo con el mismo objeto de aplicación WSGI arriba que algo como mod_wsgi o Phusion Passenger usarían 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, cree un archivo de script separado según sea necesario para establecer un puente entre lo que ese servidor requiere y su código de aplicación. El código de su aplicación siempre debe estar fuera del directorio del documento del servidor web y solo el archivo de script que actúa como puente estaría en el directorio del documento del servidor, si corresponde.
Hasta el 21 de julio de 2009, hay una guía de instalación mucho más completa en the webpy install site, que discute flup, fastcgi, Apache y más. Todavía no he intentado, pero parece que es mucho más detallado.
Aquí es 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()
- 1. Web.py en dotcloud con wsgi
- 2. Implementación de varios servidores
- 3. Implementación de una aplicación Rails en varios servidores mediante Capistrano - Mejores prácticas
- 4. Escalar cronjobs en varios servidores
- 5. Una clase con varios archivos de implementación
- 6. Probar 400 errores con pegar en una aplicación web.py
- 7. Comunicación entre varios servidores
- 8. Escribir código de varios servidores
- 9. ¿Cómo funcionan varios servidores en sincronización para la aplicación web?
- 10. Maven Implementar en varios servidores Tomcat
- 11. Java: sincronización de subprocesos en varios servidores
- 12. Implementación de una aplicación matraz con mod_wsgi
- 13. Certificado de SSL único en varios servidores
- 14. WSGI asíncrono con Twisted
- 15. Comprensión de WSGI
- 16. implementación junit de varios corredores
- 17. ¿Distribuye hilos Java en varios servidores?
- 18. Escalar un servidor postgres a varios servidores
- 19. aplicación Java Servidores alternativas
- 20. web.py y matraz
- 21. TFS 2010: implementar en varios servidores después de la compilación
- 22. Cuál es mejor pulpo o msdeploy para la implementación automática en varios servidores usando teamcity
- 23. ¿Está bien generar hilos en una aplicación wsgi?
- 24. TFS2010 Definición de compilación para implementar en varios servidores?
- 25. Sincronización de índices de Lucene.net en varios servidores de aplicaciones
- 26. bytes WSGI oscila servir
- 27. ¿Cómo puedo servir una aplicación WSGI Python usando Mongrel2?
- 28. openID en wsgi con Python 3
- 29. ¿Cómo depurar/registrar la aplicación wsgi python?
- 30. Web.py - AttributeError: 'módulo' objeto no tiene atributo de 'aplicación'
Ok, así que no hay manera general, para hacerlo. Lástima. Entonces tendré que escribir un montón de adaptadores. ¡Gracias de todos modos! – carlpett