【问题标题】:after_filter for exceptionsafter_filter 用于异常
【发布时间】:2010-09-02 03:07:26
【问题描述】:

如果操作引发异常,是否有类似于 after_filter 的东西仍然运行?

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

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

是否有另一个我可以覆盖的函数将在与 after_filter 等效的时间调用,但无论是否引发异常都始终运行?

谢谢!

【问题讨论】:

    标签: ruby-on-rails exception filter actioncontroller


    【解决方案1】:

    您可以使用 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
    

    您可以在 application.rb 控制器类或单个控制器的类中添加 around_filter。

    【讨论】:

    • 我相信它会捕获异常,但不会给出完整的响应标头。不包括您在救援中提供的任何内容。 . .没有?
    • 如果出现异常,则没有原始响应或标题...我不确定您的 q 是什么。也许您想要github.com/rails/exception_notification,它会在出现异常时通过电子邮件向您发送堆栈跟踪、参数等。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-14
    • 1970-01-01
    相关资源
    最近更新 更多