2011-07-28 6 views
8

DeadlineExceededErrorをキャッチして処理したいので、App Engineがデフォルトでスローする標準の「サーバーエラー」ページが表示されません。グローバルなDeadlineExceededErrorハンドラを設定するにはどうすればよいですか?

リクエストハンドラでDeadlineExceededErrorsがnot caught when overriding handle_exceptionであることがわかりました(私たちはすでにこれを行っています)。

私はそうのようなcustom error_handlers app.yaml configurationを使用するように、これまでのところ失敗し、試してみました:

error_handlers: 
    - error_code: timeout 
    file: timeout.html 

...しかし、それはまた、私は何か間違ったことをやっている場合を除き、DeadlineExceededErrorsをキャッチしていないようです。

私は、特定の要求ハンドラ内DeadlineExceededErrorsをキャッチするために、次のパターンを使用することができることを承知しています:

class MainPage(webapp.RequestHandler): 
    def get(self): 
     try: 
      # Do stuff... 
     except DeadlineExceededError: 
      # Many Whelps! Handle it! 

...しかし、私は自分のアプリケーション内のすべての単一の要求ハンドラにこれを追加することを避けるためにしたいと思います。

どのように私はこれらの難しい吸盤をグローバルに捕捉できますか?

答えて

3

可能な解決策の1つは、webapp2を使用することです。webapp2はそれほどきちんとしたフレームワークであり、元のwebappよりも多くの有益なものがあります。次のようにwebapp2をすると、あなたは、handle_500方法で例外を処理できます

def BaseHandler(webapp2.RequestHandler): 
    def handle_500(request, response, exception): 
     if isinstance(exception, DeadlineExceededError): 
      response.write('Deadline exceeded!') 
     else: 
      response.write('A server error occurred!') 

     logging.exception(exception) 
     response.set_status(500) 
+0

はwebapp2をで、あなたが500ステータスコードを処理するためにエラーハンドラを設定することができます - 主にキャッチされなかった例外のために使用。 ifinstance(exception、DeadlineExceededError):...ドキュメントはここにあります:http://webapp-improved.appspot.com/guide/exceptions.html#exceptions-in- the-wsgi-app – moraes

+0

私は実際にそれを知らなかった。はい、それはエラー処理を置くより適切な場所になります。 –

+1

これは私が示唆しているものです。ただし、エラーのリダイレクトは送信しないでください。同じURLのエラーページを配信してください。 –

関連する問題