ExceptionNotifier и rescue_from - PullRequest
       12

ExceptionNotifier и rescue_from

10 голосов
/ 10 марта 2011

Я пытаюсь реализовать в своем приложении rails 3 специальную обработку исключений и обработку исключений.Когда я использую только уведомления об исключениях, все работает нормально.В режиме разработки с

config.consider_all_requests_local = false

и rescue_from в моем application_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

в моем приложении.что параметры не загружаются в request.env.Я попробовал файл в дополнительном инициализаторе, и я не знаю, что еще - это не работает.На данный момент у меня действительно ужасный хак, где я объединяю request.env с хешем перед доставкой письма .. Есть идеи?

1 Ответ

7 голосов
/ 31 мая 2011

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
...