2013-04-11 7 views
3

python27로 Google 애플리케이션 엔진을 사용하고 있습니다.Google App Engine (Python) app.yaml urlhandler가 작동하지 않습니다.

handlers: 
    - url: /favicon\.ico 
     static_files: favicon.ico 
     upload: favicon\.ico 

    - url: /hello 
     script: helloworld.app 

    - url: /.* 
     script: main.app 

helloworld.py 및 main.app에는 차이가 거의없는 공식 문서의 코드와 동일한 코드가 있습니다 (응답 문자열).

import webapp2 
class MainHandler(webapp2.RequestHandler): 
    def get(self): 
     self.response.write('Hello world!!!') 
app = webapp2.WSGIApplication([ 
    ('/', MainHandler) 
], debug=True) 

내 결과 : 1 "~", 응답이 "main.app"에서 비롯됩니다. 2. "~/favicon.ico"응답은 "favicon.ico"에서옵니다. 3. "~/hello"응답은 "404"입니다. 4. "~/something", 응답은 "404"입니다.

죄송합니다.이 질문을 게시하려면 "~"("http://localhost:8080")을 입력하십시오.

왜 3과 4를 처리 할 수 ​​없습니까? 뭔가 잘못 됐니?

답변

3

('/', MainHandler)(r'/.*', MainHandler)으로 변경해보십시오 (r은 원시 문자열임을 나타냅니다). 문제는 현재 루트 / 이외의 다른 핸들러가 없으므로 다른 매개 변수 (예 : http://localhost:8080/hello)의 요청과 일치하는 핸들러가 없으므로이를 처리하는 방법을 알 수 없습니다. 핸들러를 /.*으로 변경하면 모든 요청 (루트 이후에 오는 내용과 상관없이)이 MainHandler으로 라우트되어야 함을 의미합니다.

*.py 파일의 app.yaml 처리기 및 처리기에 대해서는 app.yaml을 고위 관리자로 생각하십시오. 요청을 받고 간단히 어디로 보낼지 결정합니다 (정적 Javascript 파일에 대한 요청이 있습니까? CSS? Picture? 아니면 페이지를 제공해야하는 요청입니까?). 위의 경우 URL이 /favicon (/.*)이 아닌 URL을 입력 할 때 특정 페이지를 게재하기를 원하는 경우 으로 요청하면 main.py에있는 main.app으로 라우팅됩니다. 파일 (나는 지금 helloworld.app을 무시하고있다. 왜냐하면 주로 자신의 상황에서 반드시 필요하지는 않기 때문이다).

더 세분화 된 처리가 발생합니다. main.app은 원래 요청을 받고 코드를 실행하는 특정 처리기를 찾습니다. 처리기를 r'/.*'으로 변경하면 들어오는 모든 것과 일치합니다 (이 경우 /, /hello, /helloworld 등).이 경우 해당하는 MainHandler 클래스를 실행합니다.

+0

고맙습니다. 문제가 해결되었습니다. app.yaml과 * .py의 두 핸들러 간의 차이점을 알아 내고 더 많은 것을 읽을 것입니다. – Babeler

+0

@Babeler 문제 없습니다. 행복하게 도와 드리겠습니다. http://webapp-improved.appspot.com/guide/routing.html을 확인하십시오.이 URL은 webapp2 프레임 워크를 사용하는 URL 라우팅에 대한 webapp2의 설명서입니다. 희망적으로 유용 할 답변에 조금 더 자세하게 추가했습니다. 모든 것에 행운을 빈다. – RocketDonkey