基本的Rails 404错误页面(Basic Rails 404 Error Page)

2019-07-18 14:27发布

我一直在寻找一个简单的答案,这对于一个可笑的很长一段时间,它似乎像这样具有如此明显的清楚和简单的,因为没有人有一个简单,傻瓜证明的教程。

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

我觉得这应该是最容易做的事情......但我无法弄清楚。

任何帮助深表感谢。

Answer 1:

在你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和你去那里

......或者也许我缩手缩脚有异常,你应该从救RuntimeError代替。



Answer 2:

我相信,如果你在生产模式下运行,那么在公共目录被送达404.html只要有一个URL没有路线。



Answer 3:

如果您在生产模式下,404.html,500.html运行,在公共目录422.html文件中获取服务,每当有相应的错误发生,从上面的页面将显示。

在Rails 3.1

我们可以使用象下面这样:Rails的3.1会自动生成正确的HTTP状态码的响应(在大多数情况下,是200 OK)。 您可以使用:状态选项更改此:

渲染:状态=> 500

渲染:状态=>:禁止

Rails understands both numeric and symbolic status codes.

富勒详细信息,请参阅此页

干杯!



Answer 4:

无论何时抛出的任何错误,因为不是所有的错误会导致404,你不会得到一个404。 这就是为什么你有你的公开目录404,422和500页。 我想轨已经认为这是最常见的错误。 就像本说,404将拿出时,当应用程序抛出一个错误无法找到的东西,500。 在这两者之间,您可以覆盖大量的基地。



Answer 5:

这样做的另一种方式是在配置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



文章来源: Basic Rails 404 Error Page