Ruby on rails 基本Rails 404错误页面

Ruby on rails 基本Rails 404错误页面,ruby-on-rails,routing,http-status-code-404,Ruby On Rails,Routing,Http Status Code 404,很长一段时间以来,我一直在寻找一个简单的答案,这似乎是显而易见的,因为没有人有一个简单的,傻瓜证明教程 无论如何,我想做的就是在抛出任何错误时加载一个404.html静态页面。理想情况下,这应该只发生在生产和暂存中 我觉得这应该是最简单的事情。。。但我想不出来 非常感谢您的帮助。我相信,如果您在生产模式下运行,那么每当没有URL路由时,就会提供公共目录中的404.html。每当抛出任何错误时,您都不会得到404,因为并非所有错误都会导致404。这就是为什么您的公共目录中有404422和500页。

很长一段时间以来,我一直在寻找一个简单的答案,这似乎是显而易见的,因为没有人有一个简单的,傻瓜证明教程

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

我觉得这应该是最简单的事情。。。但我想不出来


非常感谢您的帮助。

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

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

在您的
应用程序控制器中

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\u pages/404.html


…或者我对异常情况过于谨慎,您应该从RuntimeError中解救出来。

如果您在生产模式下运行,每当出现相应的错误时,公共目录中的404.html、500.html、422.html文件都会得到服务,上面的页面将显示出来

在rails 3.1中

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

渲染:状态=>500

呈现:状态=>:禁止

Rails可以理解数字和符号状态代码。


干杯

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

module YourApp
  class Application < Rails::Application
    # ...

    config.action_dispatch.rescue_responses.merge!(
      'MyCustomException' => :not_found
    )
  end
end

阅读更多关于

以下是我的做法。在我的
应用程序\u controller.rb
中:

def render_404
  render file: 'public/404.html', layout: false, status: :not_found
end
然后,在我想要渲染404的任何控制器中,我执行如下操作:

@appointment = Appointment.find_by(id: params[:appointment_id]) || render_404

感谢您的回答,我还想补充一点,我发现在这个主题上有一篇深入的文章,它应该可以工作,尽管文档中说您应该使用
Rails.application.config.consulate all\u requests\u local
而不是
ActionController::Base.consulate all\u requests\u local
。您的应用程序中的任何错误现在都将返回404,虽然不是500,但这是正确的。。。路由错误不会被挽救,看吧,虽然我猜这是他问的,但确实不应该这么做:)我使用nginx规则对/images中找不到的任何东西抛出404。我应该在路由文件中放什么?好问题@chishomer,我给出了最好的答案。检查一下。
@appointment = Appointment.find_by(id: params[:appointment_id]) || render_404