web.py и gunicorn


Мой вопрос в основном заключается в том, что в названии: как я могу настроить gunicorn для запуска web.py приложение? (Кроме того, если есть какие-либо различия, как бы я сделал это на heroku?)

У меня уже есть приложение, работающее на heroku с помощью встроенного cherrypy, но я не смог заставить gunicorn работать с ним web.py (я просто не знаю, с чего начать - я не мог найти никаких учебников).

1 4

1 ответ:

Боюсь, я не знаком с хероку, но могу ответить на ваш основной вопрос.

Gunicorn-это HTTP-сервер для запуска Python web apps через WSGI. web.py это фреймворк для создания веб-приложения Python с помощью тут WSGI.

Таким образом, вам действительно не нужен учебник для использования обоих вместе, так как все, что вам нужно сделать, это выяснить, как пройти точку входа WSGI вашего web.py применение к гуникорну. Приложение тут WSGI-это просто питон, вызываемую при правильном интерфейс, т. е. он принимает определенные параметры и возвращает определенный ответ. Смотрите Этот учебник WSGI для получения дополнительной информации.

Приложение "hello world" от web.py учебник выглядит так test.py:

import web

urls = (
    '/', 'index'
)

class index:
    def GET(self):
        return "Hello, world!"

if __name__ == "__main__":
    app = web.application(urls, globals())
    app.run()
Но это не раскрывает приложение WSGI, в котором нуждается gunicorn.

Web.py предоставляет приложение WSGI с помощью метода wsgifunc web.application. Мы можем добавить это к test.py добавив после класса index следующее:

# For serving using any wsgi server
wsgi_app = web.application(urls, globals()).wsgifunc()

Это в основном то, что web.py документация говорит вам сделать в разделе развертывания, при использовании Apache + mod_wsgi - тот факт, что код Python является одним и тем же для нас с gunicorn не является совпадением, потому что это именно то, что WSGI дает вам - стандартный способ написать Python так, чтобы он мог быть развернут с помощью любого WSGI-способного сервера.

Как описано в gunicorn docs , мы можем затем указать gunicorn на член wsgi_app модуля test следующим образом:

(tmp)day@office:~/tmp$ gunicorn test:wsgi_app
2012-12-03 23:31:11 [19265] [INFO] Starting gunicorn 0.16.1
2012-12-03 23:31:11 [19265] [INFO] Listening at: http://127.0.0.1:8000 (19265)
2012-12-03 23:31:11 [19265] [INFO] Using worker: sync
2012-12-03 23:31:11 [19268] [INFO] Booting worker with pid: 19268