2011-07-04 5 views
0

pylons.controllers.utilの中止機能を使用して、何が間違っているのかを示す404エラーページと500エラーページを表示できるようにしたいのですが、関数はerrormiddlewareから例外メールを私に送ります。Pylons abort関数でエラー時に例外メールが送信される

は今のところ、私はこれを持っている:

try: 
    do(this) 
except: 
    abort(500, 'Something went wrong!') 

これは500ヘッダといいです私のメッセージ、でページを表示します。しかし、私が望むのは、私が500エラーを自分で返したにもかかわらず、私に送られた標準の例外電子メールを得ることです。

これを行う方法はありますか?どういうわけかそこからerrormiddleware関数を実行できますか?任意のアイデアを高く評価

答えて

0

Pylonsは既に、config.iniファイルのerror_email_fromとemail_toパラメータを使用して、電子メールに非常に良いエラー報告をしています。例えば

[DEFAULT] 
email_to = [email protected] 
error_email_from = [email protected] 

更新:

  1. 独自のエラーマッパ(正しい道を)定義: あなたが達成したいものをやっての2通りの方法があります。コードサンプルはhttp://wiki.pylonshq.com/display/pylonsdocs/Error+Documentsをご覧ください。
  2. error.pyコントローラの「document」メソッドで電子メールを送信します(高速ですがハッキリです)。
0

ごmiddleware.pyでは、これを持っている必要があります。それはあなたのエラーを処理する

if asbool(full_stack): 
    # Handle Python exceptions 
    app = ErrorHandler(app, global_conf, **config['pylons.errorware']) 

    # Display error documents for 401, 403, 404 status codes (and 
    # 500 when debug is disabled) 
    if asbool(config['debug']): 
     app = StatusCodeRedirect(app) 
    else: 
     app = StatusCodeRedirect(app, [400, 401, 403, 404, 500]) 

。エラーが発生したときに電子メールを送信する場合は、コードのクリティカルセクションで呼び出すヘルパー関数を作成します。ヘルパー関数は、エラーの詳細を電子メールに送信するか、このミドルウェア(ErrorHandler)を書き換えることができます。
ofcあなたは、既存のErrorHandlerにそのヘルパー関数呼び出しを追加することもできますが、私はそれをお勧めしません(既存のlibを変更するには良いプログラミングではありません)。

そのヘルパー関数のコード:

import turbomail 
def send_mail(body, author,subject, to): 
    conf = { 
      'mail.on': True, 
      'mail.transport': 'smtp', 
      'mail.smtp.server': 'smtp.DOMAIN.SMT:25', 
     } 

    turbomail.interface.start(conf) 
    message = turbomail.Message(
      author = author, 
      to = to, 
      subject = subject, 
      plain = body, 
      encoding = "utf-8" 
     ) 

    message.send() 
    turbomail.interface.stop() 

がちょうど手で例外を発生させた程度、すなわち(SomeMeaningfulException)を上げる方法

+0

私はこれがちょっとしたハックだと感じています。私は、別のメール送信メカニズムを望んでいない、それは失敗する可能性があり、デフォルトのerrormiddlewareのように見て実行されません。とにかく答えてくれてありがとう:-) –

0

...それが役に立てば幸い? errormiddlewareによって自動的に処理されるはずです。

+0

raise()はどのライブラリの関数ですか?私は "HTTPBadRequest( 'エラーの理由')をwebobのlibから引き上げることはできますが、私はそれがerrormiddlewareを引き起こすとは思わないでしょう。 –

関連する問題