Les Rails 3.1 et les biens D'Image

j'ai mis toutes mes images pour mon thème admin dans le dossier assets dans un dossier appelé admin. Puis je faire un lien vers elle comme d'habitude c'est à dire.

# Ruby    
image_tag "admin/file.jpg" .....
#CSS
.logo{ background:url('/assets/images/admin/logo.png');

POUR INFO. Juste pour tester je n'utilise pas encore la balise asset_path car je n'ai pas encore compilé mes actifs.

Ok tout va bien jusqu'à ce que je décide de mettre à jour une image. J'ai remplacé quelques couleurs mais sur recharger la nouvelle image stylée ne montre pas. Si je regarde l'image directement dans le navigateur son immobile montrant l'ancienne image. En allant un peu plus loin, j'ai détruit le dossier admin images. Mais il n'a rien cassé toutes les images sont encore affichées. Et oui, j'ai vidé mon cache et essayé plusieurs navigateurs.

Est-il une sorte de cache d'image? Il s'agit simplement de développement local en utilisant pow pour servir les pages.

détruisant même le dossier images entières, les images sont toujours servies.

est-ce que je manque quelque chose?

155

7 réponses

en 3.1, il suffit de se débarrasser de la partie "images" du chemin. Ainsi, une image qui vit dans /assets/images/example.png sera en fait accessible dans une requête get à cette url - /assets/example.png

parce que le dossier assets/images est généré avec une nouvelle application 3.1, c'est la convention qu'ils veulent probablement que vous suiviez. Je pense que c'est là que image_tag va le chercher, mais je ne l'ai pas encore testé.

aussi, pendant la conférence de RailsConf, Je rappelez-vous D2h disant le le public folder ne devrait pas avoir beaucoup en elle plus, la plupart du temps juste des pages d'erreur et un favicon.

226
répondu Lee McAlilly 2013-03-16 07:30:55

vous voulez changer l'extension de votre fichier css de .css.scss à .css.scss.erb et faire:

background-image:url(<%=asset_path "admin/logo.png"%>);

vous pourriez avoir besoin de faire un" rafraîchissement dur " pour voir les changements. CMD+SHIFT+R sur les navigateurs OSX.

en production, assurez-vous que

rm -rf public/assets    
bundle exec rake assets:precompile RAILS_ENV=production

se produit lors d'un déploiement.

98
répondu tybro0103 2011-06-22 13:34:35

pour ce que ça vaut, quand j'ai fait ça, j'ai trouvé qu'aucun dossier ne devrait être inclus dans le chemin dans le fichier css. Par exemple , si j'ai app/assets/images/example.png , et que je l'ai mis dans mon fichier css...

div.example { background: url('example.png'); }

... alors en quelque sorte la magie fonctionne. J'ai compris cela en exécutant la tâche rake assets:precompile , qui aspire tout hors de tous vos chemins de chargement et le jette dans un dossier de tiroir poubelle: public/assets . C'est ironique, de l'OMI...

dans tous les cas ce cela signifie que vous n'avez pas besoin de mettre des chemins de dossiers, tout dans vos dossiers actifs finira par vivre dans un énorme répertoire. Comment ce système résout nom de fichier conflits n'est pas clair, vous devez être prudent à ce sujet.

c'est un peu frustrant qu'il n'y ait pas de meilleurs docs pour ce grand changement.

22
répondu Andrew 2011-06-25 19:48:14

dans les rails 4, Vous pouvez maintenant utiliser un helper CSS et sass-url:

div.logo {background-image: image-url("logo.png");}

si vos images d'arrière-plan n'apparaissent pas, pensez à regarder comment vous les référencez dans vos feuilles de style.

16
répondu lflores 2014-05-26 16:58:03

lorsque vous faites référence à des images dans CSS ou dans une étiquette IMG, utilisez image-name.jpg

alors que l'image est vraiment situé sous ./ assets/images / image-name.jpg

10
répondu Tilo 2011-11-18 17:43:57

http://railscasts.com/episodes/279-understanding-the-asset-pipeline

Ce railscast (Rails Tutoriel vidéo sur l'asset pipeline) aide beaucoup à expliquer les chemins d'accès dans les actifs pipeline. Je l'ai trouvé assez utile, et effectivement regardé quelques fois.

la solution que j'ai choisie est celle de @Lee McAlilly ci-dessus, mais ce bulletin ferroviaire m'a aidé à comprendre pourquoi cela fonctionne. Espérons que cela aide!

2
répondu botbot 2012-03-12 00:53:08

le pipeline de l'actif dans les rails offre une méthode pour cette chose exacte.

il vous suffit d'ajouter image_path('image filename') à votre fichier CSS ou scss et les rails s'occupent de tout. Par exemple:

.logo{ background:url(image_path('admin/logo.png'));

(notez que cela fonctionne comme dans un .erb vue, et vous n'utilisez pas "actif" ou "/assets/images" dans le chemin d'accès)

Rails offre également d'autres méthodes d'assistance, et il y a une autre réponse ici: comment utiliser des images de référence dans Sass en utilisant des Rails 3.1?

0
répondu benrugg 2017-05-23 11:54:09