Rails中的低级异常处理

时间:2011-08-13 08:02:01

标签: ruby-on-rails ruby-on-rails-3 exception

如何在Rails中使用异常处理?目前我已经完成了以下工作。

在每个控制器方法中,我添加了

begin
  <myCode>
rescue
  <exception handler>

但我认为使用Rails我应该能够在Application控制器中定义一个异常处理程序方法,并从那里捕获所有异常,而不必从每个方法处理它们。

我在应用程序控制器中使用了'rescue_action_in_public',但是当我在config / database.yml中给出错误的数据库名称并加载应用程序时,它没有捕获这些异常。

我的问题是

1 - 在应用程序控制器中有一个异常处理程序并捕获异常是重新编译吗?如果没有,标准方法是什么?

2 - 我如何处理未找到数据库的异常,没有查看表字段的权限等类型的低级异常

我正在使用Rails 3,我在Rails 2.3.8中也有一些项目

2 个答案:

答案 0 :(得分:1)

根据PragProg的Advanced Rails Recipes一书,一般的异常处理是一种很好的方法。   rescue_action (所有环境)和 rescue_action_in_public (生产)用于捕获抽象控制器类中的任何异常。所以你做对了。

启动应用程序在加载控制器之前发生,因此您无法在那里处理 database.yml 。如果仍然需要这样做,请输入初始化程序ruby文件以检查文件是否存在且是否有效,然后初始化AR :: Base连接以执行 DESC table

答案 1 :(得分:0)

对于Rails 3,您可以在ApplicationController中使用rescue_from。如果要捕获的异常处于较低级别,则可以配置机架中间件层,以便捕获控制器无权访问的异常。这就是Hoptoad的工作原理。我最近发布了一个rails 3 gem,它将使用rescue_from捕获常见异常,并为html,json和xml提供定义良好的http状态代码和错误响应。这可能适合您的需求,也可能不适合您。 https://github.com/voomify/egregious