异常的after_filter

13

有没有类似于after_filter的东西,即使操作引发异常仍会运行?

我正在使用外部记录器(因为我在Heroku上); 响应标头在after_filter中被过滤和记录。 如果引发异常,则过滤器不会运行,我就没有响应标头数据的日志。

如果我尝试挂钩log_error或rescue_action_in_public,响应标头将不完整(因为实际渲染是在这些之后调用的)。

是否有另一个函数可以重写,它将在相当于after_filter的时间调用,但无论是否抛出异常都会始终运行?

谢谢!

1个回答

12
你可以使用 around_filter 并捕获异常。例如:
# in a controller
around_filter :catch_exceptions

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

您可以将around_filter添加到application.rb控制器类中,也可以添加到单个控制器的类中。


这会捕获异常,但我认为它不会提供完整的响应头。无论你在 rescue 中渲染什么都不会被包括进去……对吧? - Andrew C
如果出现异常,那么就没有原始的响应或头信息了...我不确定您的问题是什么。也许您想要使用http://github.com/rails/exception_notification,当出现异常时它会向您发送电子邮件,其中包含堆栈跟踪、参数等更多信息。 - Larry K

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接