Rails中的ActionController :: RoutingError(没有路由匹配[GET]"/ favicon.ico")

iCy*_*org 33 ruby-on-rails ruby-on-rails-3

我试过用

<link href="/favicon.ico" rel="shortcut icon" /> 
Run Code Online (Sandbox Code Playgroud)

以及这个

<link href="/assets/favicon.ico" rel="shortcut icon" />
Run Code Online (Sandbox Code Playgroud)

但我仍然在日志文件中看到此错误

ActionController::RoutingError (No route matches [GET] "/favicon.ico"):
Run Code Online (Sandbox Code Playgroud)

favicon.ico在公共文件夹中(我也把它放在app/assets文件夹中)

如何解决这个错误?

dee*_*our 51

你得到这个错误,因为你没有favicon.ico在你的public/应用程序的目录.由于该文件不存在在那里,导轨上移动,寻找一个途径来匹配/favicon.icoconfig/routes.rb.

您可以通过以下两种方式之一解决此问题

  1. 手动将favicon.ico文件放在public/应用程序的目录中.
  2. favicon.icoapp/assets/images/,然后改变你的<link ...代码中使用image_path

    <link href="<%= image_path("favicon.ico") %>" rel="shortcut icon" />
    
    Run Code Online (Sandbox Code Playgroud)

    这将放置favicon.icopublic/assets/favicon.ico,没有在文档根.

我建议坚持上面的#1.


至于为什么这个请求甚至会出现在您的日志中,许多现代浏览器会在域的根目录中查找/favicon.ico用于书签或在选项卡或地址栏中显示的内容.这就是为什么最好保留favicon.ico域的根目录,以防浏览器决定(无论出于何种原因)忽略您的<link rel="icon shortcut" ...标记.


小智 6

这是Rails默认在application.html.erb中生成的内容:

<%= favicon_link_tag 'favicon.ico', :rel => 'shortcut icon' %>
Run Code Online (Sandbox Code Playgroud)

当它在/ public下时,它不会以这种方式找到favicon.ico

如果您将标记更改为:它正常工作(在/ public下找到favicon.ico)

<%= favicon_link_tag %>
Run Code Online (Sandbox Code Playgroud)