2011-03-09 14 views
8

Estoy tratando de implementar mi aplicación web.py en dotcloud, pero no puedo encontrar la manera de hacerlo.Web.py en dotcloud con wsgi

Fui a través de este buen tutorial: http://docs.dotcloud.com/static/tutorials/firststeps/

Y entonces miré http://docs.dotcloud.com/static/components/python/ ...

El servicio pitón puede alojar cualquier aplicación web pitón compatible con el estándar WSGI .

que incluye todas las modernas Python web marcos: Django, los pilones, web.py, web2py, etc.

...

carreras pitón con Nginx + uWSGI, gestionado por supervisord. Los activos estáticos son servidos directamente por Nginx, para mayor rendimiento.

...

dotCloud se basa en herramientas y convenciones bien establecidas para construir su aplicación. Debe ser trivial adaptar cualquier aplicación para ejecutar en DotCloud.

...

Al desplegar su aplicación, dotCloud busca un archivo llamado wsgi.py. Asegúrese de crear ese archivo en la raíz del directorio de la aplicación.


googlear "wsgi web.py" conduce a http://webpy.org/install que tiene una gama bastante desconcertante de instrucciones. Intenté una serie de sugerencias en la página, pero no conseguí que funcionara nada.

El prospecto más prometedor parecía ser la creación de un archivo llamado wsgi.py así:

import web 

urls = (
    '/(.*)', 'hello' 
) 

class hello:  
    def GET(self, name): 
    if not name: 
     name = 'World' 
    return 'Hello, ' + name + '!' 

app = web.application(urls, globals(), autoreload=False) 
application = app.wsgifunc() 

También creó un vacío __init__.py al lado de él.

luego hice:

dotcloud create jca_hello.py 
dotcloud deploy -t python jca_hello.www 
dotcloud push jca_hello.www . 

Pero ahora, cuando voy a http://www.jca_hello.dotcloud.com/ todo lo que veo es:

uWSGI error

aplicación WSGI que no se encuentra

Cualquier ideas?

Respuesta

13

soy compañero de usuario de web.py y trabajo en dotCloud por cierto :-)

Utilizamos uWSGI para ejecutar su aplicación WSGI. El punto es que uWSGI está buscando una variable llamada "aplicación".

Esto es lo que suele hacer:

app = web.application(urls, globals()) 

if __name__ == '__main__': 
    app.run() 
else: 
    web.config.debug = False 
    application = app.wsgifunc() 

para que ambos puedan seguir utilizando su aplicación en el equipo local:

$ python ./wsgi.py 

y empujarlo sobre la producción (en dotCloud por supuesto;) con el modo de depuración desactivado.

Aquí está el archivo de wsgi.py corregido:

import web 

urls = (
    '/(.*)', 'Hello' 
) 

class Hello(object): 

    def GET(self, name): 
     if not name: 
      name = 'World' 
     return 'Hello, ' + name + '!' 

app = web.application(urls, globals()) 

if __name__ == '__main__': 
    app.run() 
else: 
    web.config.debug = False 
    application = app.wsgifunc() 

Cuidado con la correcta tener su wsgi.py en su AppRoot.

También asegúrese de que usted tiene un archivo llamado "requirements.txt" en su AppRoot que contiene:

web.py 

Mientras tanto, no dude en ponerse en contacto con el soporte dotCloud si tiene algún problema con sus implementaciones .

+1

Impresionante. Funciona. Debo decir que no esperaba obtener una respuesta detallada de un desarrollo de dotcloud en 2 horas :) –

+0

ya existe la variable 'aplicación' en la pregunta original. ¿no? – skyork