Пусть функция отмены Pylons отправляет электронные письма об ошибках - PullRequest
0 голосов
/ 04 июля 2011

Я хочу иметь возможность использовать функцию прерывания из pylons.controllers.util для отображения 404, 500 страниц ошибок с информацией о том, что пошло не так, но в то же время заставить функцию прерывания отправлять мне сообщения об исключениях из errormiddleware.

Прямо сейчас у меня есть это:

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

Это отображает страницу с заголовком 500 и моим сообщением, что приятно. Но я хочу, чтобы мне отправлялись электронные письма со стандартными исключениями, даже если я сам вернул ошибку 500.

Есть ли способ сделать это? Можно ли как-то запустить функцию errormiddleware оттуда? Любые идеи приветствуются.

Ответы [ 3 ]

0 голосов
/ 04 июля 2011

Как насчет того, чтобы просто вызвать исключение вручную, то есть повысить (SomeMeaningfulException)?Это должно автоматически обрабатываться программным обеспечением errormiddle.

0 голосов
/ 17 июля 2011

Pylons уже имеет очень хорошие сообщения об ошибках по электронной почте с помощью error_email_from и email_to params в файле config .ini.

Например:

[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' (быстрый, но хакерский способ).
0 голосов
/ 04 июля 2011

в вашем 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, но я не рекомендую его (не рекомендуется программировать для изменения существующей библиотеки).

код этой вспомогательной функции:

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()

надеюсь, это поможет ...

...