49 votes

Rails 3.1 sert des images provenant de vendor/assets/images

J'essaie de mettre des images externes (utilisées par un plugin jQuery) dans vendor/assets/images dans mon application Rails 3.1. Le problème est que lorsque j'essaie quelque chose comme :

<%= image_tag "ui-bg_flat_75_ffffff_40x100.png" %>

J'obtiens une erreur :

No route matches [GET] "/assets/ui-bg_flat_75_ffffff_40x100.png"

J'ai vérifié mon Rails.application.config.assets.paths et il liste ces répertoires :

..../app/assets/images
..../app/assets/javascripts
..../app/assets/stylesheets
..../vendor/assets/images
..../vendor/assets/stylesheets
..../.rvm/gems/ruby-1.9.2-p180@mygems/gems/jquery-rails-1.0.9/vendor/assets/javascripts

Comme vous pouvez le voir, /vendor/assets/images y figure. Si je place mon image dans app/assets/images, tout fonctionne.

Je pensais que le pipeline des nouveaux actifs était censé parcourir tous les répertoires d'actifs et servir le fichier demandé là où il le trouve.

Quelqu'un sait-il quel est le problème ?

79voto

Adrian Macneil Points 5339

J'ai dû redémarrer mon serveur rails après avoir créé le fichier vendor/assets/images répertoire. Avant cela, je voyais la même erreur que vous ("No route matches [GET]").

Je pense que le serveur rails ne vérifie pas ces répertoires s'ils n'existaient pas au moment de son démarrage. Lorsque vous ouvrez une console rails pour diagnostiquer le problème, vous obtenez une nouvelle instance de rails qui connaît le répertoire, ce qui ne fait qu'ajouter à la confusion.

22voto

woelfle Points 293

Si vous utilisez un thème jQuery UI Theme Roller, le problème peut venir du fait que dans le fichier css de jquery-ui, les images sont référencées dans un sous-dossier "images".

C'est-à-dire que vous devez soit placer vos images dans un dossier './app/assets/images/images' ou vous devez éditer le fichier css de jquery-ui et supprimer le préfixe du dossier 'images/'.

9voto

vincent jacquel Points 4456

Le pipeline d'actifs est décrit dans ce guide sur les rails rédigé par Ryan Bigg (en cours de rédaction).

http://ryanbigg.com/guides/asset_pipeline.html y http://ryanbigg.com/2011/06/sprocket-asset-tags-internals/ pour les références.

Votre exemple devrait donc fonctionner.

Extrait :

Les actifs peuvent être placés dans une application à l'un des trois endroits suivants : app/assets, lib/assets ou vendor/assets.

app/assets est destiné aux actifs appartenant à l'application, tels que les images personnalisées, les fichiers javascript ou les feuilles de style.

lib/assets est destiné au code de vos propres bibliothèques qui n'entre pas vraiment dans le cadre de l'application ou aux bibliothèques qui sont partagées entre plusieurs applications.

vendor/assets est destiné aux actifs appartenant à des entités extérieures, comme le code des plugins JavaScript.

Tout sous-répertoire existant dans ces trois emplacements sera ajouté au chemin de recherche de Sprockets (visible en appelant Rails.application.config.assets.paths dans une console). Lorsqu'une ressource est demandée, ces chemins seront parcourus pour voir s'ils contiennent une ressource correspondant au nom spécifié. Une fois qu'une ressource a été trouvée, elle est traitée par Sprockets puis servie.

J'ai testé avec un exemple dans mon application et la même syntaxe que la vôtre fonctionne. Peut-être avez-vous une faute de frappe dans le nom de votre actif.

Pour Martin : le chemin de recherche pour Sprockets est visible en appelant Rails.application.config.assets.paths dans une console.

2voto

daynRails Points 21

Peut-être devriez-vous créer un autre dossier dans /assets/images. Vous créez un nom 'images' et ensuite vous copiez toutes les images de jquery-ui et vous les collez dans le dossier 'images' que vous avez créé auparavant. J'espère que cela vous aidera.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X