Я создал приложение web.py, и теперь, когда он готов к развертыванию, я хочу запускать его не на встроенном веб-сервере web.py. Я хочу иметь возможность запускать его на разных веб-серверах, Apache или IIS, без необходимости менять код приложения. Вот где WSGI должен войти, если я правильно его понимаю.
Однако я не понимаю, что я должен сделать, чтобы сделать мое приложение разворачиваемым на сервере WSGI? Большинство примеров предполагают, что вы используете Pylons/Django/other-framework, на котором вы просто запускаете магическую команду, которая исправляет все для вас.
Из того, что я понимаю (довольно короткую) документацию web.py, вместо того, чтобы запускать web.application(...).run()
, я должен использовать web.application(...).wsgifunc()
. И что потом?Развертывание приложения Web.py с WSGI, несколькими серверами
ответ
То, что вам нужно сделать, чтобы разместить его с помощью определенного механизма хостинга 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
Главное, чтобы структурировать ваши веб-приложения, так что это в своем собственном автономный набор модулей. Чтобы работать с конкретным сервером, затем создайте отдельный файл сценария, необходимый для соединения между тем, что требуется для этого сервера, и кодом вашего приложения. Ваш код приложения всегда должен находиться за пределами каталога документа веб-сервера, и только файл сценария, который действует как мост, в случае необходимости будет находиться в каталоге документа сервера.
По состоянию на 21 июля 2009 года, есть гораздо более полное руководство по установке на the webpy install site, что обсуждает flup, 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()
- 1. Клиент с несколькими серверами
- 2. Hangfire с несколькими серверами
- 3. JPA с несколькими серверами
- 4. Paperclip с несколькими серверами
- 5. Развертывание Capistrano с тонкими серверами
- 6. Развертывание приложения с несколькими окнами в Kivy
- 7. Разница между утилитами WSGI и веб-серверами
- 8. scaling statsd с несколькими серверами
- 9. Аутентификация ASPNET с несколькими серверами
- 10. PhpStorm, работающий с несколькими серверами
- 11. Работа с несколькими серверами GIT
- 12. Использование Git с несколькими серверами
- 13. Развертывание Azure Flask - интерфейс WSGI
- 14. Синхронизация между несколькими серверами?
- 15. Связь между несколькими серверами
- 16. MySQL между несколькими серверами
- 17. развертывание Django с использованием пассажирской WSGI
- 18. Развертывание приложения django. на heroku (gunicorn, wsgi issue)
- 19. Связь между несколькими серверами с использованием Perfect
- 20. Как настроить Rhino ESB с несколькими серверами
- 21. Использование Entity Framework с несколькими серверами
- 22. Java NIO UDP-клиент с несколькими серверами
- 23. Как разделить развертывание веб-приложения между веб-серверами и серверами изображений
- 24. инструмент для управления несколькими серверами tomcat
- 25. C++: Один клиент, взаимодействующий с несколькими серверами
- 26. kube2sky в кубернете с несколькими серверами api
- 27. Как использовать socket.io-redis с несколькими серверами?
- 28. Работа с несколькими серверами Ruby on Rails
- 29. Управление пользователями Linux/разрешениями с несколькими серверами
- 30. Один клиент, разговаривающий с несколькими серверами
Ok, так что нет никакого общего способа сделать это. Жалость. Тогда мне просто нужно написать кучу адаптеров. Спасибо в любом случае! – carlpett