【问题标题】:Rail Validation Error Handling铁路验证​​错误处理
【发布时间】:2009-03-29 23:18:18
【问题描述】:

目前,当我的 rails 应用程序遇到错误时,它会将错误代码和堆栈跟踪转储到浏览器窗口中。

如何关闭此功能,使这些错误仅记录在日志中而不输出到浏览器?

谢谢

更正:我最关心的只是验证错误。我想要的只是使用生成的脚手架时获得的相同功能。我想显示验证错误消息并突出显示有问题的表单字段。现在我得到的只是这个标准的开发错误输出。最初这是在我的应用程序上运行的,但不知何故丢失了。

【问题讨论】:

    标签: ruby-on-rails error-handling


    【解决方案1】:

    当您的服务器在生产模式下遇到错误时,它将显示默认的 rails 错误页面,而不是您在开发模式下看到的堆栈跟踪。

    您可以添加自定义静态 html 500 或 404 错误页面,方法是将它们放在 public/500.html 和 public/404.html 中。

    如果您想以不同的方式处理错误,可以将以下代码放入您的 ApplicationController(此代码未经测试,但基于我的一个项目中非常相似的方法):

    around_filter :handle_errors
    
    def handle_errors
      begin
        yield
       rescue Exception => e
         # Handle the exception however you wish.
       end
    end
    

    请注意,上面的代码不会处理 404 错误。但是,您可以通过将以下内容放在 config/routes.rb 的底部来指定默认操作来处理无法定位的路由:

    map.connect '*path', :controller => 'home', :action => 'page_not_found'
    

    编辑:

    在进行了更多研究之后,有一种替代且可能更好的自定义错误处理方法:http://brian.pontarelli.com/2007/01/14/handling-rails-404-and-500-errors/。本质上,建议是覆盖rescue_action_in_public 方法,如下所示:

      def rescue_action_in_public(exception)
        render :template => "shared/error", :layout => "standard", :status => "500"
      end
    

    【讨论】:

    • 您还应该注意,您的过滤器不会捕获在由 rails 定义的其他过滤器中引发的错误。罪魁祸首是检查真实性令牌。
    • 感谢您的回答,但这并不是我想要的。我想我的问题不清楚,所以我已经更正了。但是,此答案将来会很有用
    猜你喜欢
    • 2017-08-19
    • 2017-07-04
    • 1970-01-01
    • 2012-10-11
    • 2017-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多