2009-05-08 3 views
19

Google 응용 프로그램 엔진 (python)의 하위 도메인에서 어떻게 작업 할 수 있습니까?Google 응용 프로그램 엔진의 하위 도메인 작업

첫 번째 도메인 부분을 가져 와서 몇 가지 조치 (처리기)를 수행하고 싶습니다.

예 :
          product.example.com -> 제품 핸들러로 보내
          user.example.com -> 사용자 처리기로 보내

사실, 가상 경로를 사용하여이 코드를 가지고 :

application = webapp.WSGIApplication(
    [('/', IndexHandler), 
    ('/product/(.*)', ProductHandler), 
    ('/user/(.*)', UserHandler) 
    ] 

답변

26

WSGIApplication은 도메인을 기반으로 라우팅 할 수 없습니다. 대신, 다음과 같이, 각각의 하위 도메인에 대해 별도의 응용 프로그램을 만들어야합니다

applications = { 
    'product.example.com': webapp.WSGIApplication([ 
    ('/', IndexHandler), 
    ('/(.*)', ProductHandler)]), 
    'user.example.com': webapp.WSGIApplication([ 
    ('/', IndexHandler), 
    ('/(.*)', UserHandler)]), 
} 

def main(): 
    run_wsgi_app(applications[os.environ['HTTP_HOST']]) 

if __name__ == '__main__': 
    main() 

다른 방법으로, 당신은 여러 호스트를 처리하는 방법을 알고 자신의 WSGIApplication 서브 클래스를 작성할 수 있습니다.

+0

고맙습니다! 나에게이 하위 WSGIA 신청의 샘플이 있습니까? 파이썬으로 말하고 있습니다 ... – Zote

+0

http://code.google.com/p/googleappengine/source/browse/trunk/python/google/appengine/ext/webapp/__init__에서 현재 소스를 확인하십시오. .py - 호스트 이름을 고려하여 __call__ 메소드를 수정하는 것은 매우 간단해야합니다. –

+0

위의 코드는 프로덕션 환경에서 두 하위 도메인이 하나의 GAE 앱에 연결된 상태에서 작동하지 않습니다. 아무도 이걸 작동시키지 않았습니까? – kovshenin

2

닉의 아이디어가 마음에 들었지만 약간 다른 문제가있었습니다. 하나의 특정 하위 도메인을 조금 다르게 처리하려고했지만 다른 하위 도메인은 모두 동일하게 처리해야합니다. 그래서 여기에 내 예가있다.

import os 

def main(): 
    if (os.environ['HTTP_HOST'] == "sub.example.com"): 
     application = webapp.WSGIApplication([('/(.*)', OtherMainHandler)], debug=True) 
    else: 
     application = webapp.WSGIApplication([('/', MainHandler),], debug=True) 

    run_wsgi_app(application) 


if __name__ == '__main__': 
    main()