Il y a un problème étrange avec Rails 4 sur Heroku. Lorsque les images sont compilées, des hachages leur sont ajoutés, mais la référence à ces fichiers depuis CSS n'a pas le nom correct ajusté. Voici ce que je veux dire. J'ai un fichier appelé logo.png. Pourtant, quand il apparaît sur Heroku, il est considéré comme:
/assets/logo-200a00a193ed5e297bb09ddd96afb953.png
Cependant, le CSS déclare toujours:
background-image:url("./logo.png");
Résultat: l'image ne s'affiche pas. Quelqu'un a rencontré ça? Comment cela peut-il être résolu?
ruby-on-rails
heroku
ruby-on-rails-4
Nick ONeill
la source
la source
Réponses:
Sprockets et Sass ont quelques aides utiles que vous pouvez utiliser pour faire le travail. Sprockets ne traitera ces assistants que si les extensions de fichier de votre feuille de style sont soit
.css.scss
ou.css.sass
.Aide spécifique à l'image:
Aide agnostique:
Ou si vous souhaitez incorporer les données d'image dans le fichier css:
la source
asset-data-url
fonctionne pour moi après avoir changé mon fichier .css en fichier .css.scss dans une application Rails 4. Merci!asset-data-url
car il intègre tout le fichier dans la feuille de style.sass-rails
j'ai finalement ajouté l'extension du fichier.scss
aux fichiers .css incriminés afin qu'ils se terminent tous.css.scss
, puis j'ai remplacé toutes les instances deurl('blah.png')
withurl(asset-path('blah.png'))
(dans mon cas, tous les blah.pngs étaient dans un/vendor
ed dossier).asset-url($asset)
devrait être utilisé pour les pignons 3, la version avec$asset-type
fonctionne probablement avec une ancienne versionJe ne sais pas pourquoi, mais la seule chose qui a fonctionné pour moi était d'utiliser asset_path au lieu de image_path , même si mes images se trouvent dans le répertoire assets / images / :
Exemple:
En rubis:
En .scss:
METTRE À JOUR:
Je me suis rendu compte que ces aides-ressources provenaient du joyau sass-rails (que j'avais installé dans mon projet).
la source
background-image: url(asset-path('off.png'))
Dans Rails 4, vous pouvez facilement référencer une image située
assets/images/
dans vos.SCSS
fichiers comme ceci:Lorsque vous lancez l'application en mode développement (
localhost:3000
), vous devriez voir quelque chose comme:En mode production, vos actifs auront les numéros d'aide de cache:
la source
production.rb
.Le hachage est dû au fait que le pipeline d'actifs et le serveur optimisent la mise en cache http://guides.rubyonrails.org/asset_pipeline.html
Essayez quelque chose comme ceci:
Bonne chance
la source
.css
ça n'a pas marché pour moi.En CSS
bien que le chemin d'origine soit /assets/images/banner.jpg, par convention, vous devez simplement ajouter / assets / dans la méthode url
la source
vendor/assets
,app/assets
,lib/assets
, etc.) sont combinées en un seul dossier actif après est complet avenant?/assets/banner.jpg
ne fonctionneront pas. Au lieu de cela, ce sera quelque chose comme/assets/banner-f719451f1e0ddd15f153c4eedde044b2.jpg
. TL; DR Ne l'utilisez pas.Aucune des réponses ne dit comment, quand j'aurai une
.css.erb
extension, comment référencer les images . Pour moi, j'ai travaillé aussi bien en production qu'en développement :2.3.1 CSS et ERB
Le pipeline d'actifs évalue automatiquement ERB . Cela signifie que si vous ajoutez une extension erb à un actif CSS (par exemple,
application.css.erb
), des aides commeasset_path
sont disponibles dans vos règles CSS:Cela écrit le chemin d'accès à l'actif particulier référencé. Dans cet exemple, il serait logique d'avoir une image dans l'un des chemins de chargement d'actifs, tel que
app/assets/images/image.png
, qui serait référencé ici. Si cette image est déjà disponible enpublic/assets
tant que fichier d'empreintes digitales, ce chemin est référencé.Si vous souhaitez utiliser un URI de données - une méthode d'intégration des données d'image directement dans le fichier CSS - vous pouvez utiliser l'
asset_data_uri
aide.Cela insère un URI de données correctement formaté dans la source CSS.
Notez que la balise de fermeture ne peut pas être du style -%>.
la source
Seul cet extrait ne fonctionne pas pour moi:
Mais renommer stylename.scss en stylename.css.scss m'aide.
la source
Référencement des documents Rails nous constatons qu'il existe plusieurs façons de créer des liens vers des images de CSS. Allez simplement à la section 2.3.2.
Tout d'abord, assurez-vous que votre fichier css a l'extension .scss s'il s'agit d'un fichier sass.
Ensuite, vous pouvez utiliser la méthode ruby, qui est vraiment moche:
Ou vous pouvez utiliser le formulaire spécifique qui est plus agréable:
Enfin, vous pouvez utiliser le formulaire général:
la source
CE QUE J'AI TROUVÉ APRÈS DES HEURES DE MUCKING AVEC CELA:
TRAVAUX :
Ce qui précède génère quelque chose comme:
"/assets/transparent_2x2-ec47061dbe4fb88d51ae1e7f41a146db.png"
Remarquez le "/" , et il est entre guillemets . Notez également l' extension scss et l'assistant image_path dans yourstylesheet.css.scss. L'image se trouve dans le répertoire app / assets / images .
Ne fonctionne pas:
ne fonctionne pas, propriété invalide:
Mon dernier recours allait être de les mettre dans mon seau public s3 et de les charger à partir de là, mais finalement, quelque chose s'est passé.
la source
Fait intéressant, si j'utilise «background-image», cela ne fonctionne pas:
Mais juste «arrière-plan», cela fait:
la source
Dans certains cas, les éléments suivants peuvent également être appliqués
logo {background: url (<% = asset_data_uri 'logo.png'%>)}
Source: http://guides.rubyonrails.org/asset_pipeline.html
la source
Lors de l'utilisation de gem 'sass-rails', dans Rails 5, bootstrap 4, ce qui suit a fonctionné pour moi,
dans le fichier .scss:
dans le fichier de vue (par exemple .html.slim):
la source
Cela devrait vous y amener à chaque fois.
la source
Par défaut, Rails 4 ne servira pas vos ressources. Pour activer cette fonctionnalité, vous devez aller dans config / application.rb et ajouter cette ligne:
https://devcenter.heroku.com/articles/rails-4-asset-pipeline#serve-assets
la source
Dans Rails 4, utilisez simplement
.hero { background-image: url("picture.jpg"); }
la source
Vous pouvez ajouter à votre extension css .erb. Ej: style.css.erb
Ensuite, vous pouvez mettre:
la source
Cela a fonctionné pour moi:
la source