2012-01-22 12 views
6

Pythonで書かれたGoogle Appengineプロジェクトでは、エラーが発生したときに私自身のエラーメッセージを残したいと思います。私はで説明したようにerror_handlersを使用したい: http://code.google.com/intl/nl/appengine/docs/python/config/appconfig.html#Custom_Error_ResponsesGoogle Appengine Python用のapp.yamlでカスタムエラーページを作成する方法

私はdebug = False

でWebアプリケーションを使用するアプリケーションでは、私は自分のコードでエラーを作成するときに、私は、ブラウザから標準500サーバーエラーメッセージが表示されます。

私が作成したカスタムエラーページdefault_error.html

という名前の質問です:このカスタムエラーページを保存するためにはどこ?

ところでこれは私のapp.yamlコードです:

application: customerrorpage 
version: 1 
runtime: python 
api_version: 1 


error_handlers: 
- file: default_error.html 

handlers: 
- url: /good.htm 
    static_files: static/good.htm 
    upload: static/good.htm 

- url:/
    static_files: static/good.htm 
    upload: static/good.htm 

- url: /.* 
    script: main.py 

答えて

0

これにアプローチする1つの方法は、あなたの要求ハンドラがサブクラス化されてから「BaseRequestHandler」クラスを定義することです。 BaseRequestHandlerクラスは、handle_exception()メソッド(http://code.google.com/appengine/docs/python/tools/webapp/requesthandlerclass.html#RequestHandler_handle_exceptionを参照)をオーバーライドしてエラーページを表示できます。ちょうどのpythonの一部とカスタム404を定義する

+0

'BaseRequestHandler'クラスとapp.yamlの使用の関係は何ですか? – Hans

4

が私の作品:

app.error_handlers[404] = handle_404

def handle_404(request, response, exception): 
    c = {'exception': exception.status} 
    t = jinja2.get_jinja2(app=app).render_template('404.html', **c) 
    response.write(t) 
    response.set_status(exception.status_int) 

これはあなたのエラーメッセージと表示したいかもしれない他のダイナミクスをより細かく制御できます。

+2

提案していただきありがとうございます。しかし私はカスタム404エラーページを定義する必要はありません。私は単にすべての入力とそれに対する応答をきちんと受け入れます。それが理論です。実際には、私は十分なテストをしていないという事実、またはover_quotaエラーが発生したプロジェクトが人気を集めているため、プログラムエラーを起こす可能性があります。私の前提は、すべてのサーバーエラー(500エラー)とover_quotaのような他のすべてのAppengine固有のサーバーエラーはapp.yamlでカスタマイズ可能であったということでした。ですから、このタイプのエラーを処理するためにyaml.appを使用したいのですが、カスタムerror_pageはどこに保存しますか? – Hans

+1

この提案はwebapp2をおそらく使用していることを私に教えてくれました – Hans

0

一部の仕組みが見つかりました。あなたの答えはありがとうございました。

HTMファイルの場所は、コアまたは別のディレクトリにある可能性があります。それは、例えばケースの使用はならをapp.yamlファイルに次のコードは:

error_handlers: 
- file: error_handlers/default_error.html 

今のディレクトリに配置する必要があり、HTMLファイルを示すerror_handlersする

あなたがメインで、存在しないモジュールをインポートする場合.py上記のページが表示されます。

500エラーを取得するには、webapp2を使用してカスタムエラーページを表示しました。このページは、エラーが発生したときに常に表示されます。 over_quotaエラーがあり、app.yamlが正しく設定されている場合でも。私もwebapp2を削除し、webappを再度使用しました。これで、ページは全く表示されません。

私は現在、over_quoteの別のアプリを持っています。どのようにover_quota HTMLページを表示するには?バグですか?

+0

error_handlersプロパティにフィルタを追加できます。オーバーquotaは " - error_code:over_quota"のように見えます。クォータ、DoS保護、タイムアウトに個別のフィルタを追加できます - https://cloud.google.com/appengine/docs/python/config/appconfig#Python_app_yaml_Custom_error_responses – Greg

関連する問題