Развертывание приложения Web.py с WSGI, несколько серверов

StackOverflow https://stackoverflow.com/questions/1078599

  •  21-08-2019
  •  | 
  •  

Вопрос

Я создал приложение web.py, и теперь, когда оно готово к развертыванию, я хочу запустить его не на встроенном веб-сервере web.py.Я хочу иметь возможность запускать его на разных веб-серверах, Apache или IIS, без необходимости изменять код приложения.Вот тут-то и должен появиться WSGI, если я правильно понимаю.
Однако я не понимаю, что именно мне нужно сделать, чтобы мое приложение можно было развернуть на сервере WSGI?В большинстве примеров предполагается, что вы используете Pylons/Django/other-framework, на котором вы просто запускаете какую-то волшебную команду, которая все исправит за вас.
Насколько я понимаю (довольно краткую) документацию web.py, вместо запуска web.application(...).run(), я должен использовать web.application(...).wsgifunc().А что потом?

Это было полезно?

Решение

То, что вам нужно сделать, чтобы разместить его с помощью определенного механизма хостинга WSGI, зависит от сервера.

В случае Apache/mod_wsgi и Phusion Passenger вам просто нужно предоставить файл сценария WSGI, который содержит объект с именем «приложение».Для web.py 0.2 это результат вызова web.wsgifunc() с соответствующими аргументами.Для web.py 0.3 вместо этого вы используете функцию-член wsgifunc() объекта, возвращаемого web.application().Подробности см. в документации mod_wsgi:

http://code.google.com/p/modwsgi/wiki/IntegrationWithWebPy

Если вместо этого вам необходимо использовать адаптеры FASTCGI, SCGI или AJP для такого сервера, как Lighttpd, nginx или Cherokee, вам необходимо использовать пакет «flup», чтобы обеспечить мост между этими языково-независимыми интерфейсами и WSGI.Это предполагает вызов функции flup с тем же объектом приложения WSGI, что и mod_wsgi или Phusion Passenger, которые можно было бы использовать напрямую без необходимости использования моста.Подробности об этом см.:

http://trac.saddi.com/flup/wiki/FlupServers

Важно структурировать ваше веб-приложение так, чтобы оно имело собственный автономный набор модулей.Чтобы работать с конкретным сервером, создайте отдельный файл сценария, необходимый для моста между тем, что требуется этому серверу, и кодом вашего приложения.Код вашего приложения всегда должен находиться за пределами каталога документов веб-сервера, и только файл сценария, который действует как мост, должен находиться в каталоге документов сервера, если это необходимо.

Другие советы

По состоянию на 21 июля 2009 г. на сайте доступно гораздо более полное руководство по установке. сайт установки Webpy, это обсуждает провал, fastcgi, апач и более.я еще не пытался это, но кажется, что это гораздо более подробно.

Вот пример двух размещенных приложений, использующих сервер Cherrypy WsGI:

#!/usr/bin/python
from web import wsgiserver
import web

# webpy wsgi app
urls = (
  '/test.*', 'index'
)

class index:
    def GET(self):
        web.header("content-type", "text/html")
        return "Hello, world1!"

application = web.application(urls, globals(), autoreload=False).wsgifunc() 


# generic wsgi app
def my_blog_app(environ, start_response):
    status = '200 OK'
    response_headers = [('Content-type','text/plain')]
    start_response(status, response_headers)
    return ['Hello world! - blog\n']


"""
# single hosted app
server = wsgiserver.CherryPyWSGIServer(
            ('0.0.0.0', 8070), application,
            server_name='www.cherrypy.example')

"""

# multiple hosted apps with WSGIPathInfoDispatcher
d = wsgiserver.WSGIPathInfoDispatcher({'/test': application, '/blog': my_blog_app})
server = wsgiserver.CherryPyWSGIServer(('0.0.0.0', 8070), d)            
server.start()
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top