2009-08-18 2 views
1

AppEngine의 devserver를 spawning으로 바꿉니다. appawine처럼 표준 wsgi 처리기를 생성하므로 응용 프로그램을 쉽게 실행할 수 있습니다.AppEngine Devserver를 Spawning으로 바꿉니다 (BaseHTTPRequestHandler with WSGI)

그러나 devserver 계정에 URL이 당신의 애플리케이션 제목의 파일을 소요 등 내가 devserver 코드를 통해 진행되고 한 리디렉션하고이 같은 BaseHTTPRequestHandler를 얻기 위해 매우 간단하다

from google.appengine.tools.dev_appserver import CreateRequestHandler 
dev = CreateRequestHandler(os.path.dirname(__file__), '', require_indexes=False, static_caching=True) 

그러나 BaseHTTPRequestHandler는 WSGI 응용 프로그램이 아니므로 제 생각에 주위에 뭔가를 넣어서 제대로 작동시켜야합니다. 어떤 힌트?

+0

그래서 명확히하기 위해 Google 서버에서이 작업을 수행하지 않으시겠습니까? 자신의 서버에서 appengine 애플리케이션을 실행하기 만하면됩니다. –

+0

정확히. 하지만 실제로는 서버가 아니라 지역 개발 용입니다. –

+1

이전에 대체 WSGI 호스팅 메커니즘에서 작동하는 appengine 스택을 얻으려고 시도했습니다. Google은 WSGI 응용 프로그램 코드 자체를 WSGI 서버 위에 놓을 수는 있지만 실제로 만들지는 못하게함으로써 코드를 매우 쉽게 만들 수있었습니다. 단지 Google이기 때문에 다른 사람보다 더 나은 코드를 작성하는 것은 아닙니다. ;-) –

답변

2

dev_appserver의 일부를 꺼내서 사용자 지정 WSGI 서버에서 아주 쉽게 사용할 수있을 것 같지 않습니다. dev_appserver는 '마술'을 많이하며 실제로 다른 서버에서 WSGI 래퍼로 사용되도록 구조화 된 것은 아닙니다 (더 많은 동정심입니다).

다른 서비스 환경을 만드는 중임을 알고있는 T wistedAE을 확인해보십시오. 정말로 산란을 원한다면 TwistedAE의 작업을 기초로 사용할 수 있습니다.

  1. 당신은 CreateRequestHandler에 의해 반환 된 클래스와 WSGI 인터페이스에 자신의 심 (shim)을 쓸 수 있습니다 : 당신이 스스로를하고 싶지 않는 경우 말했다

    , 몇 가지 옵션이있다. 이 경우 Python SDK에서 BaseHTTPServer .BaseHTTPRequestHandler의 인터페이스를 복제해야합니다. WSGI를 변환하면 dev_appserver 코드가 다시 변환 할 수 있습니다.

  2. DevAppServerRequestHandler의 _HandleRequest 메서드에서 코드를 추출하고 WSGI와 함께 작동하도록 수정 한 다음 WSGI 응용 프로그램을 만들 수 있습니다 (DIY를 원하면 가장 좋은 방법 일 수 있습니다).
  3. 처음부터 시작할 수 있습니다. TwistedAE의 접근 방법이라고 생각합니다.

무엇이든 상관없이 다음 사항에 유의해야합니다. App Engine은 앱용 단일 스레드 환경을 명시 적으로 기대합니다. 프로덕션 환경이나 dev_appserver에서와 같은 방식으로 응용 프로그램을 작동 시키려면 멀티 스레드 방식을 사용하지 마십시오!