2009-07-03 2 views
6

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

ответ

6

То, что вам нужно сделать, чтобы разместить его с помощью определенного механизма хостинга 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 или чероки, то вам нужно использовать «flup» пакет чтобы обеспечить мост между этими языковыми агностическими интерфейсами и WSGI. Это включает вызов функции flup с тем же объектом приложения WSGI, что и нечто вроде mod_wsgi, или Phusion Passenger будет использовать напрямую без необходимости в мосте. Подробнее об этом см:

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

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

+0

Ok, так что нет никакого общего способа сделать это. Жалость. Тогда мне просто нужно написать кучу адаптеров. Спасибо в любом случае! – carlpett

0

По состоянию на 21 июля 2009 года, есть гораздо более полное руководство по установке на the webpy install site, что обсуждает flup, FastCGI, апача и многое другое. Я еще не попробовал это, но похоже, что это намного подробнее.

0

Вот пример двух размещенных приложений, использующих 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() 
Смежные вопросы