我一直在寻找一个简单的答案,这对于一个可笑的很长一段时间,它似乎像这样具有如此明显的清楚和简单的,因为没有人有一个简单,傻瓜证明的教程。
无论如何,所有我想做的事就是有每当抛出任何错误加载一个404.html静态页面。 理想情况下这应该只发生在生产和分期。
我觉得这应该是最容易做的事情......但我无法弄清楚。
任何帮助深表感谢。
我一直在寻找一个简单的答案,这对于一个可笑的很长一段时间,它似乎像这样具有如此明显的清楚和简单的,因为没有人有一个简单,傻瓜证明的教程。
无论如何,所有我想做的事就是有每当抛出任何错误加载一个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
和你去那里
......或者也许我缩手缩脚有异常,你应该从救RuntimeError代替。
我相信,如果你在生产模式下运行,那么在公共目录被送达404.html只要有一个URL没有路线。
如果您在生产模式下,404.html,500.html运行,在公共目录422.html文件中获取服务,每当有相应的错误发生,从上面的页面将显示。
在Rails 3.1
我们可以使用象下面这样:Rails的3.1会自动生成正确的HTTP状态码的响应(在大多数情况下,是200 OK)。 您可以使用:状态选项更改此:
渲染:状态=> 500
渲染:状态=>:禁止
Rails understands both numeric and symbolic status codes.
富勒详细信息,请参阅此页
干杯!
无论何时抛出的任何错误,因为不是所有的错误会导致404,你不会得到一个404。 这就是为什么你有你的公开目录404,422和500页。 我想轨已经认为这是最常见的错误。 就像本说,404将拿出时,当应用程序抛出一个错误无法找到的东西,500。 在这两者之间,您可以覆盖大量的基地。
这样做的另一种方式是在配置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
。