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 под управлением супервизора. Статические активы обслуживаются непосредственно Nginx для повышения производительности.

...

DotCloud опирается на хорошо зарекомендовавшие себя инструменты и соглашения для создания вашего приложения. Адаптация любого приложения для работы в DotCloud должна быть тривиальной.

...

При развертывании вашего приложения DotCloud ищет файл с именем wsgi.py. Обязательно создайте этот файл в корне каталога вашего приложения.


Поиск в Google «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
переменная «приложение» в исходном вопросе уже существует. нет? - person skyork; 28.02.2012