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

时间:2013-03-28 16:43:36

标签: ruby-on-rails ruby-on-rails-3

我尝试过使用

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

以及

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

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

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

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

如何解决此错误?

4 个答案:

答案 0 :(得分:48)

您收到此错误是因为您的应用程序的favicon.ico目录中没有public/。由于该文件不存在,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而不是

  3. 我建议坚持上面的#1


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

答案 1 :(得分:6)

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

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

当它在/ public

下时,它没有找到favicon.ico

如果您将标记更改为:

,它可以正常工作(在/ public下找到favicon.ico)
<%= favicon_link_tag %>

答案 2 :(得分: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文件夹中,然后设置好。

答案 3 :(得分:0)

favicon.ico 放入 app / assets / images / ,然后添加

<link href="<%= image_path("favicon.ico") %>" rel="shortcut icon" />

在布局文件中。

这适合我。