여러 서버 인 WSGI로 web.py 응용 프로그램을 배포합니다
문제
Web.py 애플리케이션을 만들었고 이제 배포 할 준비가되었으므로 Web.py의 내장 된 Webserver에서 실행하고 싶습니다. 응용 프로그램 코드를 변경하지 않고도 다른 웹 서버, Apache 또는 IIS에서 실행할 수 있기를 원합니다. 내가 올바르게 이해한다면 WSGI가 들어올 예정인 곳입니다.
그러나 WSGI 서버에서 응용 프로그램을 배포 할 수 있도록하는 데 있어야하는 일이 무엇인지 이해가 안 돼요? 대부분의 예는 Pylons/Django/Other-Framework를 사용하고 있다고 가정합니다. 여기서 모든 것을 수정하는 Magic Command를 실행합니다.
내가 이해하는 것에서 (아주 간단한) web.py 문서, 실행 대신 web.application(...).run()
, 나는 사용해야한다 web.application(...).wsgifunc()
. 그 다음엔?
해결책
특정 WSGI 호스팅 메커니즘으로 호스팅하기 위해 정확히해야 할 일은 서버에 따라 다릅니다.
Apache/mod_wsgi 및 Phusion 승객의 경우 '응용 프로그램'이라는 개체가 포함 된 WSGI 스크립트 파일 만 제공하면됩니다. web.py 0.2의 경우, 이것은 적절한 인수를 가진 web.wsgifunc ()를 호출 한 결과입니다. web.py 0.3의 경우 대신 wsgifunc () wsgifunc () 멤버 함수를 사용하여 web.application ()에 의해 반환됩니다. 이에 대한 자세한 내용은 mod_wsgi 문서를 참조하십시오.
http://code.google.com/p/modwsgi/wiki/integrationwithwebpy
대신 LightTPD, Nginx 또는 Cherokee와 같은 서버에 FASTCGI, SCGI 또는 AJP 어댑터를 사용해야하는 경우 해당 언어의 비율 인터페이스와 WSGI 사이의 브리지를 제공하기 위해 'flup'패키지를 사용해야합니다. 여기에는 mod_wsgi 또는 Phusion 승객과 같은 것이 다리없이 직접 사용할 수있는 것과 동일한 WSGI 응용 프로그램 개체가있는 FLUP 기능을 호출하는 것이 포함됩니다. 이에 대한 자세한 내용은 다음을 참조하십시오.
http://trac.saddi.com/flup/wiki/flupservers
중요한 것은 웹 애플리케이션이 자체적으로 포함 된 모듈 세트에 있도록 구성하는 것입니다. 특정 서버에서 작업하려면 서버가 요구하는 내용과 응용 프로그램 코드를 브리지를 위해 필요한 별도의 스크립트 파일을 만듭니다. 애플리케이션 코드는 항상 웹 서버 문서 디렉토리 외부에 있어야하며 브리지 역할을하는 스크립트 파일 만 서버 문서 디렉토리에 있어야합니다.
다른 팁
2009 년 7 월 21 일 현재, Webpy 설치 사이트, 그것은 논의합니다 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()