I have tried to use
as well as this
Putting favicon.ico
in my public folder wasn't working, so I combined some of the other answers to come up with this simple working method.
Copy the output of favicon_link_tag and inject image_path
like so:
<link href="<%= image_path("favicon.ico") %>" rel="shortcut icon" type="image/vnd.microsoft.icon" />
Now place favicon.ico
in your assets/images
folder and you're set.
This is what Rails generates in application.html.erb by default:
<%= favicon_link_tag 'favicon.ico', :rel => 'shortcut icon' %>
It doesn't find favicon.ico this way when it's under /public
It works correctly (finds favicon.ico under /public) if you change the tag to:
<%= favicon_link_tag %>
You're getting this error because you don't have a favicon.ico
in your public/
directory of your application. Because the file doesn't exist there, Rails moves on, looking for a route to match against /favicon.ico
in the config/routes.rb
.
You can fix this in one of two ways
favicon.ico
file in the public/
directory of your application.Put the favicon.ico
in app/assets/images/
and then change your <link ...
tag to use image_path
<link href="<%= image_path("favicon.ico") %>" rel="shortcut icon" />
This will place the favicon.ico
in public/assets/favicon.ico
, not in the document root.
I suggest sticking with #1 above.
As for why this request is even showing up in your logs, many modern browsers look in the root of the domain for /favicon.ico
to use for bookmarking, or presentation in a tab or the address bar. This is why it's a good idea to keep the favicon.ico
in the root of your domain, in case a browser decides (for whatever reason) to ignore your <link rel="icon shortcut" ...
tag.
Put the favicon.ico in app/assets/images/ and then add
<link href="<%= image_path("favicon.ico") %>" rel="shortcut icon" />
in the layout file.
This works for me.