Rails 3.1 et de l'Image de l'Actif
J'ai mis toutes mes images dans mon admin thème dans le dossier des ressources dans un dossier nommé 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');
FYI. Juste pour le test, je ne suis pas à l'aide de la asset_path balise juste encore que je n'ai pas compilé mon actif.
Ok tout bon jusqu'ici jusqu'à ce que j'ai décidé de mettre à jour une image. J'ai remplacé certaines couleurs mais sur recharger le nouveau style de l'image n'est pas affichée. Si je afficher l'image directement dans le navigateur de son affiche toujours l'ancienne image. Un pas plus loin, j'ai détruit l'admin dossier d'images. Mais il a rompu rien de toutes les images sont toujours affichées. Et oui, j'ai effacé le cache de mon navigateur et ont essayé sur plusieurs navigateurs.
Est-il une sorte de cache d'image passe? C'est juste le développement local à l'aide de pow pour servir les pages.
Même détruire l'ensemble du dossier des images les images sont toujours servi.
Suis-je raté quelque chose?
- ce n'est pas le cas avec la 3.1 à l'aide de l'asset pipeline. Vous pouvez utiliser la commande rake actifs:précompiler qui va compresser les fichiers et les déplacer vers le dossier public
- Bien de les déplacer vers le dossier public travaillé, tout est un peu étrange comme ils ont travaillé beaux-être servies à partir du dossier des actifs. Peut-être attendre plus de docs sur 3.1.
- Je comprends votre frustration. Apparemment communiqué de candidats n'obtiennent pas très bien documenté.
- Les laisser dans les actifs, il suffit de ne pas inclure un chemin d'accès au dossier à tous. Voir ma réponse ci-dessous.
Vous devez vous connecter pour publier un commentaire.
En 3.1-vous tout simplement se débarrasser des "images" de la partie du chemin d'accès. Donc une image qui vit dans
/assets/images/example.png
sera effectivement accessible dans une requête get à l'url -/assets/example.png
Parce que le
assets/images
dossier est généré avec une nouvelle 3.1 application, c'est la convention qui ils voudront vous suivre. Je pense que c'est làimage_tag
va la chercher, mais je ne l'ai pas testé encore.Également, au cours de la RailsConf keynote, je me souviens D2h dire la
public folder
ne devrait pas avoir beaucoup de choses en plus, la plupart du temps simplement les pages d'erreur et d'un favicon.Vous aurez envie de changer l'extension de ton fichier css de
.css.scss
à.css.scss.erb
et à faire:Vous devrez peut-être faire un "rafraîchissement" pour voir les changements. CMD+MAJ+R sur mac OSX navigateurs.
Dans la production, assurez-vous que
qui se passe lors du déploiement.
.css
à.css.erb
(après que vous avez déplacé dansapp/assets
pour obtenir le erb traitement sans sass.Pour ce que ça vaut, quand j'ai fait ce que j'ai trouvé qu'aucun dossier à inclure dans le chemin d'accès dans le fichier css. Par exemple si j'ai
app/assets/images/example.png
, et j'ai mis ceci dans mon fichier css...... alors en quelque sorte la magie fonctionne. J'ai compris cela en exécutant la
rake assets:precompile
tâche, qui aspire tout simplement tout ce qui sort de tous vos parcours de charges et de décharges dans un tiroir d'ordure dossier:public/assets
. C'est ironique, IMO...En tout cas cela signifie que vous n'avez pas besoin de mettre tous les chemins du dossier, tout dans vos dossiers assets va finir par vivre dans un immense répertoire. Comment ce système résout nom de fichier conflits n'est pas clair, vous devez être prudent à ce sujet.
Genre de frustrant, il n'y a pas mieux docs là-bas pour ce grand changement.
asset_path()
helper et en spécifiant le répertoire.Dans les rails 4 vous pouvez maintenant utiliser un css et sass helper image-url:
Si vos images de fond ne s'affiche pas envisager de regarder la façon dont vous faites référence dans vos feuilles de style.
div.logo {background: image-url("logo.png") no-repeat center;}
lorsque le référencement des images dans le CSS ou dans une balise IMG, l'utilisation image-name.jpg
alors que l'image est vraiment situé en vertu de l' ./assets/images/image-name.jpg
background: url('sort_asc_disabled.png')
il travaille pour le fichier app/assets/images/sort_asc_disabled.png.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 choisi est @Lee McAlilly s ci-dessus, mais ce railscast m'a aidé à comprendre pourquoi il fonctionne. Espérons que cela aide!
L'asset pipeline dans les rails propose une méthode pour cette chose exacte.
Vous suffit d'ajouter image_path('nom du fichier') à votre css ou fichier scss et les rails s'occupe 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 puis-je utiliser les images de référence dans le Sass lors de l'utilisation de Rails 3.1?