2010-09-02 1 views
12

Есть ли что-то похожее на after_filter, который все еще работает, если действие вызывает исключение?after_filter для исключений

Я использую внешний регистратор (поскольку я нахожусь на Heroku); заголовки ответов фильтруются и регистрируются в файле after_filter. Если возникает исключение, фильтр не запускается, и у меня нет журнала данных заголовка ответа.

Если я попытаюсь подключиться к log_error или rescue_action_in_public, заголовок ответа не будет выполнен (так как после этого вызывается фактический рендер).

Есть ли еще одна функция, которую я могу переопределить, которая будет вызываться в эквивалентное время на after_filter, но всегда запускается независимо от того, выбрано ли исключение?

Спасибо!

ответ

10

Вы можете использовать round_filter и перехватывать исключения. Например:

# in a controller 
around_filter :catch_exceptions 

def catch_exceptions 
    yield 
rescue ActiveRecord::RecordNotFound 
    permission_denied_response # gives a stock error page 
end 

Вы можете добавить round_filter в класс контроллера application.rb или в класс отдельного контроллера.

+0

Это исключает исключения, но не дает полных заголовков ответов, я считаю. Все, что вы оказываете на спасение, не включено. , , нет? –

+0

Если есть исключение, тогда не было оригинального ответа или заголовков ... Я не уверен, что ваш q. Возможно, вы хотите http://github.com/rails/exception_notification, который отправляет вам по электронной почте трассировку стека, аргументы и многое другое, когда есть исключение. –