web-dev-qa-db-fra.com

ActionController :: RoutingError (Aucune route ne correspond à [GET] "/favicon.ico") dans Rails

J'ai essayé d'utiliser

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

ainsi que cette

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

mais je vois encore cette erreur dans le fichier journal 

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

le favicon.ico est dans le dossier public (je l'ai aussi mis dans le dossier app/assets)

Comment réparer cette erreur? 

30
iCyborg

Vous obtenez cette erreur car vous n'avez pas de favicon.ico dans votre répertoire public/ de votre application. Comme le fichier n’existe pas à cet endroit, Rails poursuit sa recherche d’un itinéraire à comparer avec /favicon.ico dans le config/routes.rb.

Vous pouvez résoudre ce problème de deux manières.

  1. Placez manuellement le fichier favicon.ico dans le répertoire public/ de votre application.
  2. Placez le favicon.ico dans app/assets/images/, puis modifiez votre balise <link ... pour utiliser image_path

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

    Cela placera le favicon.ico dans public/assets/favicon.ico, pas dans la racine du document.

Je suggère de coller avec # 1 ci-dessus.


En ce qui concerne why, cette requête apparaît même dans vos journaux, de nombreux navigateurs modernes recherchent /favicon.ico dans la racine du domaine, à utiliser pour la sélection ou la présentation dans un onglet ou la barre d'adresse. C'est pourquoi il est judicieux de conserver le favicon.ico à la racine de votre domaine, au cas où un navigateur décide (quelle qu'en soit la raison) d'ignorer votre balise <link rel="icon shortcut" ....

46
deefour

C’est ce que Rails génère dans application.html.erb par défaut:

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

Il ne trouve pas favicon.ico de cette façon quand il est sous/public 

Cela fonctionne correctement (trouve favicon.ico sous/public) si vous modifiez l’étiquette en:

<%= favicon_link_tag %>
5
Alex Vidmych

Mettre favicon.ico dans mon dossier public ne fonctionnait pas, alors j'ai combiné certaines des réponses pour trouver cette méthode de travail simple. 

Copiez la sortie de favicon_link_tag et injectez image_path comme suit:

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

Placez maintenant favicon.ico dans votre dossier assets/images et vous êtes prêt.

1
Abram

Mettez le favicon.ico dans app/assets/images/puis ajoutez

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

dans le fichier de mise en page. 

Cela fonctionne pour moi.

0
stevenup