2

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

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

3 回答 3

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
于 2013-07-16T13:57:46.483 回答
5

您不需要触发控制器来执行此操作。

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

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

于 2016-09-06T23:21:05.443 回答
-1

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

每当您在实时服务器上设置 Rails 应用程序时,您将站点根目录作为应用程序中的 /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)
于 2013-07-16T13:49:02.247 回答