Rails 3 - 自定义错误和404页面

AnA*_*ice 27 ruby-on-rails ruby-on-rails-3

我正在Heroku上构建一个Rails 3应用程序.现在我的错误页面和404页面都是标准的rails/heroku页面.

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

谷歌上发现的所有教程都已有数年之久,并且不适用于Rails 3.

你能否提出一个很好的现代教程或如何做到这一点的提示?

谢谢

Rya*_*igg 36

如果你想捕获特定的错误,使用rescue_fromApplicationController.

否则,如果您只想编辑默认错误页面,请编辑{Rails.root}/public中500.html400.html文件


Abr*_*ram 11

来自Jose Valim的 2013 Rails 3.2更新

当Rails 3.0问世时,人们突然忽略的一个功能就是能够更好地处理异常.问题是:由于Rails 3变得更加"流畅",我们不得不将一些功能移到中间件堆栈,这迫使我们移动整个异常处理.Rails 3.2尝试通过允许您设置自己的异常机架应用程序(在发生故障时调用)来尝试将某些自定义重新带回游戏.例如,您可以在config/application.rb中将例外应用程序设置为您自己的路由器:

config.exceptions_app = self.routes
Run Code Online (Sandbox Code Playgroud)

现在,每次出现异常时,都会调用您的路由器.因此,要呈现自定义404页面,您只需添加到路由器:

match "/404", :to => "errors#not_found"
Run Code Online (Sandbox Code Playgroud)

并根据需要在控制器中实现逻辑!但是,如果你走这条路,有几点要记住:

  1. 您需要在路由中使用匹配而不是get/post/put/delete,因为此类异常可能在任何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使用的默认例外应用程序只需在public/STATUS.html中呈现页面即可:action_dispatch/middleware/public_exceptions.rb

请记住,无论你在错误控制器中做什么,它都不应该是任何"幻想".保持简单,因为您的应用程序已经出现问题!