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

35

我尝试使用过

<link href="/favicon.ico" rel="shortcut icon" /> 

除此之外

<link href="/assets/favicon.ico" rel="shortcut icon" />

但我仍然在日志文件中看到这个错误。

ActionController::RoutingError (No route matches [GET] "/favicon.ico"):

在public文件夹中有favicon.ico图标(我也将它放在app/assets文件夹中)

如何修复这个错误?


尝试将 favicon.ico 添加到 web 服务器的根目录中,然后再次尝试。 - Sri
4个回答

55
您之所以遇到此错误,是因为您的应用程序的public/目录中没有favicon.ico文件。由于该文件在那里不存在,Rails会继续寻找与/favicon.ico匹配的路由,然后在config/routes.rb中查找。
您可以通过以下两种方式进行修复:
1.将favicon.ico文件手动放置在您的应用程序的public/目录中。
2.将favicon.ico放置在app/assets/images/中,然后更改您的<link ...标记以使用image_path
<link href="<%= image_path("favicon.ico") %>" rel="shortcut icon" />

这将把favicon.ico放在public/assets/favicon.ico,而不是文档根目录。

我建议坚持上面的#1


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


我必须同时完成#1和#2。我正在使用favicon_link_tag助手。 - Kinjal Dixit
我认为你是完全正确的。我的网站图标配置已经全部正确设置,但我仍然偶尔会看到这些错误。很难确认,但我猜测一些设备/浏览器/UserAgents硬编码在公共目录中寻找它作为favicon.ico。我们在公共目录中放置了一个来满足这些请求,错误就消失了。 - Joshua Pinter

7

这是Rails默认生成的application.html.erb文件:

<%= favicon_link_tag 'favicon.ico', :rel => 'shortcut icon' %>

如果图标文件(favicon.ico)放在 /public 目录下,使用这种方式就无法找到它。

如果将标签更改为以下内容,则可以正常工作(可以找到 /public 目录下的 favicon.ico 文件):

<%= favicon_link_tag %>

1
favicon.ico 放在 app/assets/images/ 中,然后添加。
<link href="<%= image_path("favicon.ico") %>" rel="shortcut icon" />

在布局文件中。
这对我有效。

1
favicon.ico 放在我的公共文件夹中没有起作用,因此我结合了其他答案的一些方法,得出了这个简单的可行方法。
复制 favicon_link_tag 的输出,并像这样注入 image_path
<link href="<%= image_path("favicon.ico") %>" rel="shortcut icon" type="image/vnd.microsoft.icon" />

现在将 favicon.ico 放置在您的 assets/images 文件夹中即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接