Web.py на dotcloud с wsgi

Опитвам се да разположа приложението си web.py в dotcloud, но не мога да разбера как да го направя.

Преминах добре през този урок: http://docs.dotcloud.com/static/tutorials/firststeps/

И тогава погледнах http://docs.dotcloud.com/static/components/python/ ...

Услугата на python може да хоства всяко уеб приложение на python, съвместимо със стандарта WSGI.

Това включва всички съвременни уеб рамки на Python: Django, Pylons, web.py, web2py и др.

...

python работи с Nginx + uWSGI, управляван от supervisord. Статичните активи се обслужват директно от Nginx за по-голяма производителност.

...

DotCloud разчита на утвърдени инструменти и конвенции, за да създаде вашето приложение. Би трябвало да е тривиално да адаптирате всяко приложение да работи в DotCloud.

...

Когато внедрява вашето приложение, DotCloud търси файл, наречен wsgi.py. Уверете се, че сте създали този файл в основата на директорията на вашето приложение.


Търсенето в гугъл на „web.py wsgi“ води до http://webpy.org/install, който има доста объркващ набор от инструкции. Опитах редица предложения на страницата, но не можах да накарам нищо да работи.

Най-обещаващата перспектива изглеждаше създаването на файл, наречен wsgi.py, така:

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

Също така създадох празен __init__.py до него.

Тогава направих:

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

Но сега, когато отида на http://www.jca_hello.dotcloud.com/ всичко, което виждам е :

uWSGI Грешка

Приложението wsgi не е намерено

Някакви идеи?


person Jesse Aldridge    schedule 09.03.2011    source източник


Отговори (1)


Аз съм друг потребител на web.py и между другото работя в DotCloud :-)

Използваме uWSGI, за да стартираме вашето WSGI приложение. Въпросът е, че uWSGI търси променлива с име "приложение".

Ето какво правя обикновено:

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

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

Така че и двамата можете да продължите да използвате приложението си на локалната си машина:

$ python ./wsgi.py

И го пуснете в производство (на DotCloud, разбира се;) с деактивиран режим за отстраняване на грешки.

Ето коригирания ви файл wsgi.py:

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

Внимавайте правилно да имате вашия wsgi.py във вашия approot.

Също така се уверете, че имате файл с име "requirements.txt" във вашия approot, съдържащ:

web.py

Междувременно не се колебайте да се свържете с екипа за поддръжка на DotCloud, ако имате някакъв проблем с вашите внедрявания.

person Sam Alba    schedule 09.03.2011
comment
страхотно Работи. Трябва да кажа, че не очаквах да получа подробен отговор от dotcloud разработчик в рамките на 2 часа :) - person Jesse Aldridge; 09.03.2011
comment
променливата 'application' в първоначалния въпрос вече съществува. не? - person skyork; 28.02.2012