2011-03-09 10 views
8

Sto provando a distribuire la mia app web.py su dotcloud, ma non riesco a capire come farlo.Web.py su dotcloud con wsgi

ho passato questo bel tutorial: http://docs.dotcloud.com/static/tutorials/firststeps/

E poi ho guardato http://docs.dotcloud.com/static/components/python/ ...

Il servizio pitone può ospitare qualsiasi applicazione web pitone compatibile con lo standard WSGI.

che include tutti i moderni Python web quadri: Django, Piloni, web.py, web2py, ecc

...

piste pitone con Nginx + uWSGI, gestito da supervisord. Le risorse statiche vengono offerte direttamente da Nginx, per prestazioni superiori a .

...

DotCloud si basa su strumenti consolidati e convenzioni per costruire la vostra applicazione. Dovrebbe essere banale adattare qualsiasi applicazione per l'esecuzione su DotCloud.

...

Quando si distribuisce la vostra applicazione, DotCloud cerca un file chiamato wsgi.py. Creare sicuro per creare quel file nella directory principale della directory dell'applicazione.


Googling "WSGI web.py" porta a http://webpy.org/install che ha una gamma abbastanza sconcertante di istruzioni. Ho provato un numero di suggerimenti nella pagina, ma non ho potuto ottenere nulla per funzionare.

La prospettiva più promettente sembra essere la creazione di un file chiamato wsgi.py in questo modo:

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() 

Ho anche creato un vuoto __init__.py accanto ad essa.

poi ho fatto:

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

Ma ora quando vado a http://www.jca_hello.dotcloud.com/ vedo solo:

uWSGI errore

applicazione WSGI non trovato

Qualsiasi idee?

risposta

13

io sono compagni utente web.py e io lavoro a DotCloud a proposito :-)

Usiamo uWSGI per eseguire l'applicazione WSGI. Il punto è che uWSGI sta cercando una variabile chiamata "application".

Ecco quello che faccio di solito:

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

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

Così si può sia continuare a utilizzare la vostra applicazione sul computer locale:

$ python ./wsgi.py 

e spingerlo sulla produzione (su DotCloud naturalmente;) con la modalità di debug disabilitata.

Ecco il vostro file di wsgi.py corretti:

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() 

Attenzione correttamente avere il vostro wsgi.py nel vostro AppRoot.

fare in modo di avere un file chiamato "requirements.txt" nel AppRoot contenente anche:

web.py 

Nel frattempo, non esitate a contattare il supporto DotCloud se avete qualche problema con le distribuzioni .

+1

Impressionante. Funziona. Devo dire che non mi aspettavo di ottenere una risposta dettagliata da un dev dotcloud entro 2 ore :) –

+0

la variabile 'applicazione' nella domanda originale esiste già. no? – skyork