ExceptionNotifier и rescue_from
Я пытаюсь реализовать exception_notifier и настраиваемую обработку исключений
в моих рельсах 3 приложения. Когда я использую только исключение извещения, все работает нормально.
В режиме разработки с
config.consider_all_requests_local = false
и rescue_from в моем приложении_controller:
unless Rails.application.config.consider_all_requests_local
rescue_from Exception, :with => :render_error
end
def render_error(exception)
ExceptionNotifier::Notifier.exception_notification(request.env, exception).deliver
end
в моем приложении .rb
config.middleware.use ExceptionNotifier,
:email_prefix => "Error: ",
:sender_address => %{"notifier" <[email protected]>},
:exception_recipients => %w{ [email protected] }
Единственная проблема заключается в том, что параметры не загружаются в request.env.
Я попробовал файл в дополнительном инициализаторе, и я не знаю, что еще - он не работает.
На данный момент у меня очень уродливый взлом, где я объединять request.env с
хэш перед доставкой электронной почты..
Любая идея?
Ответы
Ответ 1
exception_notification является промежуточным программным обеспечением в Rails 3, поэтому параметры устанавливаются непосредственно в классе, который обрабатывает вызов, и этот класс не устанавливает их в среде, если он не принимает исключение (см. здесь). Эта вилка добавляет метод background_exception_notification, который вы можете использовать. Я заимствовал эту идею и просто добавил этот вспомогательный метод:
def background_exception_notification(env, exception)
if notifier = Rails.application.config.middleware.detect { |x| x.klass == ExceptionNotifier }
env['exception_notifier.options'] = notifier.args.first || {}
ExceptionNotifier::Notifier.exception_notification(env, exception).deliver
env['exception_notifier.delivered'] = true
end
end