2010-11-23 87 views
27

我在Heroku上构建了一个Rails 3应用程序。现在我的错误页面和404页面都是标准rails/heroku页面。Rails 3 - 自定义错误和404页面

我想定制这两个。有一个页面上的错误,并有一个404

在谷歌上的所有教程岁页面,不on Rails的3

工作,能否请您提出一个很好的现代化教程或如何做到以上的提示?

感谢

回答

36

如果要捕获特定错误,请在ApplicationController中使用rescue_from

否则,如果你只是想修改默认的错误页面,编辑500.html400.html文件{} Rails.root /公共

3

好Rails3中仍然使用公用文件夹相同404.html,422.html和500.html。您可以自定义这些。

如果你谈论的是实际捕获这些异常,并做一些动态的东西,我觉得基本的功能是一样的,有一些around_filter映入在application_controllerActiveRecord::RecordNotFound您的特殊例外,做的东西。

11

2013从Jose Valim

0更新为Rails 3.

当Rails 3.0问世时,人们突然错失的功能之一就是能够更好地处理异常。问题是:由于Rails 3变得更加Rack“流利”,我们必须将某些功能移到中间件堆栈,这迫使我们移动整个异常处理。 Rails 3.2尝试通过允许您设置自己的例外机架应用程序来重新引导一些自定义,这些应用程序在发生故障时会被调用。例如,你可以设置你的config/application.rb中的例外应用到你自己的路由器:

config.exceptions_app = self.routes 

现在,每次有一个例外,你的路由器将被调用。因此,呈现自定义404页,你可以简单地添加到您的路由器:

match "/404", :to => "errors#not_found" 

而且实现逻辑控制器,如你所愿!不过,也有几件事情要记住,如果你走这条路:

  1. 你需要在你的航线使用的匹配,而不是GET/POST/PUT /删除 因为这样的异常可以在任何HTTP发生请求;
  2. 除非您在您的 config/environments/development.rb中将config.consider_all_requests_local设置为false,否则您将无法在开发 中看到您的自定义例外。原因是,如果请求是 认为是本地的,Rails总是倾向于显示调试 异常页面; [或运行rails server -e production]
  3. 您可以随时访问控制器中的原始异常,地址为 env [“action_dispatch.exception”];
  4. 在 发生异常后,无法设置cookie,会话和闪光。他们都已经序列化回 客户端;
  5. 最后,Rails的使用默认的例外情况的应用程序,只需 公共/ STATUS.html渲染页面,请访问: action_dispatch /中间件/ public_exceptions.rb

请记住,无论你在做错误控制器,它不应该是任何“幻想”。保持简单,因为你的应用程序已经出错了!