2013-07-16 46 views
1

的ActionController :: RoutingError(无路由匹配[GET]“/google83362a7a0f381ff0.html”):我如何防止不必要的路由错误在生产

  1. 我看到在生产上述日志,我应该怎么防止它。
  2. 如果用户输入错误网址,我应该怎样重新定向到一个常见的错误页面

回答

6

您可以将用户重定向到你想,如果没有路由配衬

的愿望页

写下下面的代码在你的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

Rails的自动执行此操作在生产mode.When载应用程序运行时,应用到Live服务器时,Rails将负责处理这些保健例外并使用正确的标题状态呈现正确的错误页面。您可以直接在公用文件夹内找到文件。

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

当在生产模式下,如果滑轨遇到不处理错误,它会引发错误的栈,然后告诉Web服务器来呈现一个适当的错误。

下面是一些常见的错误,你会在开发模式所看到的与他们的生产模式呈现:

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

你不需要触发控制器去做。

就在routes.rb添加为最后一个规则:

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