2012-12-02 6 views
4

내 질문은 기본적으로 제목에 있습니다 : web.py 앱을 실행하려면 어떻게 gunicorn을 설정할 수 있습니까? (차이점이있을 경우 어떻게 할 것인가?)web.py and gunicorn

저는 내장 된 체리 피를 사용하여 heroku에서 실행중인 앱을 이미 가지고 있지만 웹에서 작동하도록 gunicorn을 얻을 수 없었습니다. py (어디서부터 시작해야할지 모르겠다 - 자습서를 찾을 수 없었다).

답변

11

나는 Heroku와는 다르지 않다고 생각하지만 기본 질문에 답할 수 있습니다.

gunicorn은 WSGI를 통해 Python 웹 응용 프로그램을 실행하기위한 HTTP 서버입니다. web.py는 WSGI를 사용하여 Python 웹 앱을 만들기위한 프레임 워크입니다.

둘 다 함께 사용하기위한 튜토리얼이 필요하지는 않습니다. web.py 애플리케이션의 WSGI 진입 점을 gunicorn에 전달하는 방법을 알아 내야 만합니다. WSGI 응용 프로그램은 올바른 인터페이스가있는 Python 호출 가능 객체입니다. 즉, 특정 매개 변수를 사용하고 특정 응답을 반환합니다. 자세한 내용은 this WSGI tutorial을 참조하십시오.

import web 

urls = (
    '/', 'index' 
) 

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

if __name__ == "__main__": 
    app = web.application(urls, globals()) 
    app.run() 

을하지만 그 요구를 gunicorn WSGI 응용 프로그램을 노출하지 않습니다 :

web.py 튜토리얼에서에 "Hello World"응용 프로그램이 test.py 것 같습니다.

web.py는 wsgifunc 메서드를 통해 WSGI 응용 프로그램을 web.application으로 제공합니다. - 사실 그 이는 web.py 문서는 Apache + mod_wsgi를 사용할 때 배포 섹션에서 할을 알려줍니다 무엇을 기본적으로

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

: 우리는 index 클래스 다음에 다음을 추가하여 test.py이를 추가 할 수 있습니다 Python 코드는 우리에게 똑같습니다. gunicorn은 우연이 아닙니다. WSGI가 제공하는 것과 정확히 일치합니다. 파이썬을 작성하여 WSGI 가능 서버를 사용하여 배포 할 수있는 표준 방법입니다. 다음과 같이

으로는 gunicorn docs 설명, 우리는 다음 test 모듈의 wsgi_app 멤버에 gunicorn 가리킬 수 있습니다

(tmp)[email protected]:~/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 
+0

덕분에 난 그냥 당신이 web.application에서 wsgi_app 변수를 필요 몰랐어요. 웬일인지 나는 내 자신의 기능을 정의해야만했다. – geniass

+1

이것은 정말로 좋은 대답이다. @Day! 감사! – Phil