0

pylons.controllers.util の中止機能を使用して 404, 500 エラー ページを表示し、何が問題なのかについての情報を表示できるようにしたいと考えていますが、同時に、中止機能によってエラー ミドルウェアから例外メールが送信されるようにしたいと考えています。

今、私はこれを持っています:

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

これにより、500 ヘッダーと私のメッセージを含むページが表示されます。これは素晴らしいことです。しかし、私が望んでいるのは、500 エラーを自分で返したとしても、標準の例外電子メールが送信されるようにすることです。

これを行う方法はありますか?そこから何らかの方法で errormiddleware 関数を実行できますか? どんなアイデアでも大歓迎です。

4

3 に答える 3

0

手で例外を発生させる、つまり raise(SomeMeaningfulException) はどうですか? これは、エラーミドルウェアによって自動的に処理されるはずです。

于 2011-07-04T12:01:50.727 に答える
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()

それが役に立てば幸い...

于 2011-07-04T07:06:35.630 に答える
0

Pylons はすでに config .ini ファイルの error_email_from と email_to パラメータを介して電子メールに非常に優れたエラー報告をしています。

例えば:

[DEFAULT]
email_to = errore@mysite.com
error_email_from = error_robot@mysite.com

更新: 達成したいことを行うには2つの方法があります:

  1. 独自のエラー マッパーを定義します (正しい方法)。コード サンプルについては、 http: //wiki.pylonshq.com/display/pylonsdocs/Error+Documents を参照してください。
  2. error.pyコントローラーの ' ' メソッドで電子メールを送信しますdocument(高速ですがハックな方法)。
于 2011-07-17T09:07:27.163 に答える