2011-08-09 6 views
2

私は現場でGoogle Appengineを使用しています。現在、私たちのウェブサイトとコンソールの両方で500のエラーが発生しています。これらを防止するために、またはより優雅にそれらを扱うためにできることはありますか?appengineとコンソールで500エラー

EDIT:私たちは、のWebapp

+0

あなたはどの言語を使用していますか? WebアプリケーションでPython? – moraes

答えて

2
  1. セットアップエラーハンドラでのpythonを使用している:http://code.google.com/appengine/docs/python/config/appconfig.html#Custom_Error_Responses

  2. エラーがアプリで発生した場合、エラーハンドラが助けることができません。あなたができる場合は、

    import logging 
    
    from google.appengine.ext import webapp 
    from google.appengine.ext.webapp import util 
    
    def error_handler_middleware(app): 
        """Wraps the application to catch uncaught exceptions.""" 
        def wsgi_app(environ, start_response): 
         try: 
          return app(environ, start_response) 
         except Exception, e: 
          logging.exception(e) 
          # ... display a custom error message ... 
          response = webapp.Response() 
          response.set_status(500) 
          response.out.write('Ooops! An error occurred...') 
          response.wsgi_write(start_response) 
          return [''] 
    
        return wsgi_app 
    
    app = webapp.WSGIApplication([...]) 
    app = error_handler_middleware(app) 
    
    def main(): 
        util.run_wsgi_app(app) 
    
    if __name__ == '__main__': 
        main() 
    
  3. webapp2を試してみる:一つの解決策は、キャッチされない例外を処理するアプリケーションをラップすることです。単純な関数をhandle app-wide exceptionsに設定することができます。

+0

+1あなたの答えmoraesに感謝します。このようなことはコンソールにも同様に働くでしょうか? –

+0

いいえ、コンソールのエラーが私のコントロールから外されました。私は恐れています。 – moraes

+0

このミドルウェアはwebappでは動作しません - webappは既に 'handle_exception'を呼び出して500を返すcatchallハンドラを持っています。ハンドラクラスの' handle_exception'を上書きするか、より良い選択肢です。 –