web-dev-qa-db-fra.com

Rails 3.1 servant des images du fournisseur / ressources / images

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

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

Je reçois une erreur:

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

J'ai vérifié mes Rails.application.config.assets.paths et il répertorie 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 est répertorié. Si je mets mon image dans app/assets/images, tout fonctionne.

Je pensais que le nouveau pipeline d'actifs devait passer par tous les répertoires d'actifs et servir le fichier demandé partout où il le trouve.

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

50
Slobodan Kovacevic

J'ai dû redémarrer mon Rails serveur après avoir créé le vendor/assets/images répertoire. Avant cela, je voyais la même erreur que vous ("Aucun itinéraire ne correspond à [GET]").

Je suppose que le serveur Rails ne vérifie pas ces répertoires s’ils n’existaient pas au premier 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.

80
Adrian Macneil

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

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

22
woelfle

Le portefeuille d'actifs est décrit dans ce Rails de Ryan Bigg (état du projet pour le moment).

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

Selon cela, votre exemple devrait fonctionner.

Extrait:

Les actifs peuvent être placés dans une application dans l'un des trois emplacements suivants: application/actifs, lib/actifs ou fournisseur/actifs.

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

lib/assets est pour le code de vos propres bibliothèques qui ne correspond pas vraiment à la portée de l'application ou aux bibliothèques partagées entre les applications.

fournisseur/actifs est pour les actifs qui appartiennent à des entités externes, comme le code pour les plugins JavaScript.

Tout sous-répertoire qui existe dans ces trois emplacements sera ajouté au chemin de recherche pour Sprockets (visible en appelant Rails.application.config.assets.paths dans une console). Lorsqu'un actif est demandé, ces chemins seront examinés pour voir s'ils contiennent un actif correspondant au nom spécifié. Une fois qu'un élément a été trouvé, il est traité par Sprockets, puis servi.

J'ai testé avec un exemple dans mon application et la même syntaxe que la vôtre fonctionne. Vous avez peut-être une faute de frappe au nom de votre élément.

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

9
vincent jacquel

Vous devriez peut-être créer un autre dossier dans/assets/images. Vous faites un nom "images", puis vous copiez simplement toutes les images jquery-ui et collez sur le dossier "images" que vous avez créé auparavant. J'espère que cela vous aidera.

2
daynRails