Web.py на dotcloud с помощью WSGI - PullRequest
8 голосов
/ 09 марта 2011

Я пытаюсь развернуть свое приложение 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.Обязательно создайте этот файл в корневом каталоге вашего приложения.


Поиск в файле "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 не найдено

Есть идеи?

1 Ответ

12 голосов
/ 09 марта 2011

Я другой пользователь web.py и работаю в DotCloud, кстати: -)

Мы используем uWSGI для запуска вашего приложения WSGI.Дело в том, что uWSGI ищет переменную с именем «application».

Вот что я обычно делаю:

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 в вашем подходе.

Также убедитесь, что в вашем подходе есть файл с именем "needs.txt", содержащий:

web.py

Тем временемНе стесняйтесь обращаться в службу поддержки DotCloud, если у вас возникли проблемы с развертыванием.

...