J'ai créé un nouveau projet Rails3 mais je vois souvent les journaux suivants dans les journaux de mon serveur. Pourquoi je reçois ces demandes et comment puis-je les éviter?
Démarrage de GET "/Apple-touch-icon-precomposed.png" pour 192.168.6.2 à 2012-09-18 20:03:53 +0530
ActionController :: RoutingError (Aucune route ne correspond à [GET] "/Apple-touch-icon-precomposed.png"):
Je n'ai donné ce lien nulle part et je ne veux pas rendre cette image nulle part. Je ne comprends pas pourquoi on essaie de charger cette ressource.
Je suppose que les appareils Apple font ces demandes si le propriétaire de l'appareil y ajoute le site. C'est l'équivalent du favicon. Pour résoudre ce problème, ajoutez 2 100 × 100 fichiers png, enregistrez-le sous Apple-touch-icon-precomposed.png et Apple-touch-icon.png et chargez-le dans le répertoire racine du serveur. Après cela, l’erreur devrait disparaître.
J'ai remarqué de nombreuses demandes pour Apple-touch-icon-precomposed.png et Apple-touch-icon.png dans les journaux qui tentaient de charger les images à partir du répertoire racine du site. J'ai d'abord pensé qu'il s'agissait d'une mauvaise configuration du thème et du plug-in pour mobile, mais j'ai appris par la suite que les périphériques Apple adressaient ces demandes si le propriétaire du périphérique y ajoutait le site.
Si un utilisateur du navigateur Web Safari (appareils Apple) visite votre site. Le navigateur tente d'extraire l'icône du site si elle n'est pas définie dans <head>
dans l'ordre suivant:
Pour résoudre ce problème, définissez une icône pour les navigateurs Web Safari ou les périphériques Apple. Ajoutez quelque chose comme ceci à la section principale de votre site:
<link rel="Apple-touch-icon" href="/custom_icon.png"/>
Si vous voulez garder <head>
clean, chargez l’icône dans le répertoire racine de votre site avec le nom propre.
La taille de l'icône default est de 57px.
Vous trouverez plus de détails sur Bibliothèque de développement iOS .
Notez que cela peut se produire même lorsque l'utilisateur n'a PAS ajouté le site au signet sur son écran d'accueil iOS. Par exemple, chaque fois que vous ouvrez une page à l'aide de Chrome pour iOS, un GET "/Apple-touch-icon-precomposed.png"
est créé.
J'ai traité cela et d'autres requêtes non HTML 404 dans ApplicationController comme suit:
respond_to do |format|
format.html { render :template => "error_404", :layout => "errors", :status => 404 }
format.all { render :nothing => true, :status => 404 }
end
La réponse format.all
prend en charge des images telles que ce fichier PNG (qui n'existe pas pour mon site).
Si vous avez terminé la recherche sur Google, il s'agit d'une configuration simple pour éviter cette erreur de saturation des journaux du serveur Web:
Apache virtualhost
Redirect 404 /Apple-touch-icon-precomposed.png
<Location /Apple-touch-icon-precomposed.png>
ErrorDocument 404 "Apple-touch-icon-precomposed does not exist"
</Location>
Bloc serveur Nginx:
location =/Apple-touch-icon-precomposed.png {
log_not_found off;
access_log off;
}
PS: Il est possible que vous souhaitiez ajouter aussi Apple-touch-icon.png
et favicon.ico
.
Il existe un joyau tel que quiet_assets qui fera taire ces erreurs dans vos journaux si, comme moi, vous ne souhaitiez pas ajouter ces fichiers à votre application Rails:
J'ai finalement résolu !! C'est une fonctionnalité Web Clip sur les périphériques Mac. Si un utilisateur souhaite ajouter votre site Web dans Dock o Desktop, il demande cette icône.
You may want users to be able to add your web application
or webpage link to the Home screen. These links, represented
by an icon, are called Web Clips. Follow these simple steps
to specify an icon to represent your web application or webpage
on iOS.
comment résoudre?: Ajoutez une icône pour résoudre le problème.
Une solution alternative consiste simplement à ajouter un itinéraire à votre routes.rb
En gros, il intercepte la requête Apple et restitue un 404 au client. De cette façon, vos fichiers journaux ne sont pas encombrés.
# routes.rb at the near-end
match '/:png', via: :get, controller: 'application', action: 'Apple_touch_not_found', png: /Apple-touch-icon.*\.png/
ajoutez ensuite une méthode 'Apple_touch_not_found' à votre application_controller.rb
# application_controller.rb
def Apple_touch_not_found
render plain: 'Apple-touch icons not found', status: 404
end
La même chose se passe pour moi. Et oui, comme @Joao Leme l'a dit, il semble que cela soit lié à un utilisateur qui ajoute un site à ses favoris sur son écran d'accueil.
Cependant, j'ai remarqué que même s'il y avait une erreur dans le journal, cela se passait dans les coulisses et l'utilisateur ne la voyait jamais. Je suppose que le périphérique demande une icône tactile spécifique à sa résolution (ce qui n’existe pas) jusqu’à ce que le code général Apple-touch-icon
ou Apple-touch-icon-precomposed
, le cas échéant, soit défini par défaut, ou génère une petite capture d’écran de la page actuelle.
FWIW, placez les icônes dans le répertoire/public.
Créez simplement des fichiers de taille zéro appelés les noms appropriés.
La demande sera satisfaite sans aucun transfert de données supplémentaire ni aucune ligne de journalisation supplémentaire.