基本Rails 404错误页面

我一直在寻找一个简单的答案,这是一个非常漫长的时间,似乎这一点非常明显和简单,因为没有人有一个简单的,白痴certificate教程。

无论如何,我想做的就是有一个单独的404.html静态页面,无论何时抛出任何错误都会加载。 理想情况下,这应该只在生产和分期中发生。

我觉得这应该是最简单的事情……但我无法弄明白。

任何帮助深表感谢。

在您的ApplicationController

 unless ActionController::Base.consider_all_requests_local rescue_from Exception, :with => :render_404 end private def render_404 render :template => 'error_pages/404', :layout => false, :status => :not_found end 

现在设置error_pages/404.html然后你就去了

…或者我对Exception过于谨慎,你应该从RuntimeError中解救出来。

我相信如果你在生产模式下运行,那么只要没有URL的路由,就会在公共目录中提供404.html。

如果您在生产模式下运行,则只要发生相应错误,就会在公共目录中提供404.html,500.html,422.html文件,将显示上面的页面。

在轨道3.1

我们可以使用如下:Rails 3.1将自动生成具有正确HTTP状态代码的响应(在大多数情况下,这是200 OK)。 您可以使用:status选项更改此设置:

渲染:status => 500

render:status =>:禁止

Rails understands both numeric and symbolic status codes.

有关更多信息,请参阅此页面

干杯!

每当抛出任何错误时,您都不会得到404,因为并非所有错误都会导致404s。 这就是为什么你的公共目录中有404,422和500页的原因。 我认为rails认为这些是最常见的错误。 就像Ben说的那样,当应用程序抛出错误时,404会出现无法找到的东西。 在两者之间,你可以涵盖很多基地。

另一种方法是使用以下命令配置config/application.rb

 module YourApp class Application < Rails::Application # ... config.action_dispatch.rescue_responses.merge!( 'MyCustomException' => :not_found ) end end 

因此,无论何时引发MyCustomException ,Rails都会将其视为常规:not_found ,呈现public/404.html

要在本地测试,请确保将config/environments/development.rb更改为:

 config.consider_all_requests_local = false 

阅读有关config.action_dispatch.rescue_responses更多信息。