基本Rails 404错误页面

chr*_*mer 25 routing ruby-on-rails http-status-code-404

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

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

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

任何帮助深表感谢.

Leo*_*sov 20

在你的 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
Run Code Online (Sandbox Code Playgroud)

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

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

  • 你的应用程序中的任何错误现在都将返回404,而不是正确的500但是...并且路由错误将不会被拯救,请参阅https://rails.lighthouseapp.com/projects/8994/tickets/6275-abstractcontrolleractionnotfound-should-被拯救看起来虽然我猜这是他所问的,虽然它确实不应该这样做:)我使用nginx规则为/无法找到的图像投掷404. (5认同)
  • 它应该工作,虽然文档说你应该使用`Rails.application.config.consider_all_requests_local`而不是`ActionController :: Base.consider_all_requests_local`. (2认同)

Sop*_*ert 14

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


Man*_*ava 7

如果您在生产模式下运行,则只要出现相应的错误,就会在公共目录中提供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.

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

干杯!