如何防止生产中出现不需要的路由错误

时间:2013-07-16 13:37:58

标签: ruby-on-rails

ActionController :: RoutingError(没有路由匹配[GET]“/google83362a7a0f381ff0.html”):

  1. 我在生产中看到上述日志,我应该如何防止它。
  2. 如果用户输错了网址,我应该如何重定向到常见的错误页面

3 个答案:

答案 0 :(得分:7)

如果没有路线匹配,您可以将用户重定向到所需的页面

记下routes.rb文件底部的以下代码

在/config/routes.rb

#If no route matches
match ":url" => "application#redirect_user", :constraints => { :url => /.*/ }

然后将用户重定向到application_controller.rb文件中的错误页面

*在/app/controllers/application_controller.rb *

def redirect_user
  redirect_to '/404'
end

答案 1 :(得分:4)

您无需触发控制器即可。

只需将其添加为routes.rb中的最后一条规则:

match '*path', via: :all, to: redirect('/404')

答案 2 :(得分:-1)

当应用程序在生产模式下运行时,Rails会自动执行此操作。当应用程序上传到实时服务器时,Rails负责处理这些异常并使用正确的标头状态呈现正确的错误页面。您可以直接在公用文件夹中找到文件。

每当您在实时服务器上设置Rails应用程序时,您都将站点root作为应用程序中的/ public文件夹。然后,每当向该服务器地址发出请求时,Web服务器首先查找该公用文件夹并尝试提供静态资产(这是config / environment.rb中的可配置选项)。如果它找不到请求的页面,那么请求将通过Ruby堆栈转发。

当处于生产模式时,如果Rails遇到未处理的错误,它会将错误抛出到堆栈,然后告诉Web服务器呈现适当的错误。

以下是您在开发模式中会看到的一些常见错误以及它们在生产模式下呈现的内容:

ActiveRecord::RecordNotFound => 404 (page not found)
nil.method => 500 (server error) unless you turn off whiny nils
ActionController::RoutingError => 404 (page not found)