J'ai des polices configurées dans mon fichier Scss comme ceci:
@font-face {
font-family: 'Icomoon';
src: asset-url('icoMoon.eot?#iefix', font) format('embedded-opentype'),
asset-url('icoMoon.woff', font) format('woff'),
asset-url('icoMoon.ttf', font) format('truetype'),
asset-url('icoMoon.svg#Icomoon', font) format('svg');
}
Le fichier de police réel est stocké dans / app / assets / fonts /
J'ai ajouté config.assets.paths << Rails.root.join("app", "assets", "fonts")
à mon fichier application.rb
et la source CSS de compilation est la suivante:
@font-face {
font-family: 'Icomoon';
src: url(/assets/icoMoon.eot?#iefix) format("embedded-opentype"), url(/assets/icoMoon.woff) format("woff"), url(/assets/icoMoon.ttf) format("truetype"), url(/assets/icoMoon.svg#Icomoon) format("svg");
}
Mais lorsque j'exécute l'application, les fichiers de polices ne sont pas trouvés. Les journaux:
A commencé GET "/assets/icoMoon.ttf" pour 127.0.0.1 à 2012-06-05 23:21:17 +0100 Actif servi /icoMoon.ttf - 404 Not Found (13ms)
Pourquoi le pipeline d'actifs n'aplatit-il pas les fichiers de police en seulement / actifs?
Des idées des gens?
Cordialement, Neil
Informaitons supplémentaires:
Lorsque je vérifie la console des rails pour les chemins des actifs et la compilation des actifs, j'obtiens ce qui suit:
1.9.2p320 :001 > y Rails.application.config.assets.precompile
---
- !ruby/object:Proc {}
- !ruby/regexp /(?:\/|\\|\A)application\.(css|js)$/
- .svg
- .eot
- .woff
- .ttf
=> nil
1.9.2p320 :002 > y Rails.application.config.assets.paths
---
- /Users/neiltonge/code/neiltonge/app/assets/fonts
- /Users/neiltonge/code/neiltonge/app/assets/images
- /Users/neiltonge/code/neiltonge/app/assets/javascripts
- /Users/neiltonge/code/neiltonge/app/assets/stylesheets
- /Users/neiltonge/code/neiltonge/vendor/assets/images
- /Users/neiltonge/code/neiltonge/vendor/assets/javascripts
- /Users/neiltonge/code/neiltonge/vendor/assets/stylesheets
- /Users/neiltonge/.rvm/gems/ruby-1.9.2-p320@neiltonge/gems/jquery-rails-2.0.0/vendor/assets/javascripts
- /Users/neiltonge/.rvm/gems/ruby-1.9.2-p320@neiltonge/gems/coffee-rails-3.2.1/lib/assets/javascripts
- /Users/neiltonge/.rvm/gems/ruby-1.9.2-p320@neiltonge/gems/bourbon-1.3.0/app/assets/stylesheets
- !ruby/object:Pathname
path: /Users/neiltonge/code/neiltonge/app/assets/fonts
=> nil
font-url
aide dans SCSS dans Rails.Réponses:
Si votre version de Rails se situe entre
> 3.1.0
et< 4
, placez vos polices dans l'un de ces dossiers:app/assets/fonts
lib/assets/fonts
vendor/assets/fonts
Pour les versions Rails
> 4
, vous devez placer vos polices dans leapp/assets/fonts
dossier.Remarque: Pour placer des polices en dehors de ces dossiers désignés, utilisez la configuration suivante:
config.assets.precompile << /\.(?:svg|eot|woff|ttf)\z/
Pour les versions Rails
> 4.2
, il est recommandé d'ajouter cette configuration àconfig/initializers/assets.rb
.Cependant, vous pouvez également l’ajouter soit
config/application.rb
àconfig/production.rb
Déclarez votre police dans votre fichier CSS:
Assurez-vous que votre police porte le même nom que dans la partie URL de la déclaration. Les majuscules et les signes de ponctuation sont importants. Dans ce cas, la police doit avoir le nom
icomoon
.Si vous utilisez Sass ou Less with Rails
> 3.1.0
(votre fichier CSS a.scss
ou une.less
extension), changez leurl(...)
dans la déclaration de police enfont-url(...)
.Sinon, votre fichier CSS devrait avoir l'extension
.css.erb
et la déclaration de police devrait l'êtreurl('<%= asset_path(...) %>')
.Si vous utilisez Rails
> 3.2.1
, vous pouvez utiliserfont_path(...)
au lieu deasset_path(...)
. Cet assistant fait exactement la même chose mais c'est plus clair.Enfin, utilisez votre police dans votre CSS comme vous l'avez déclaré dans la
font-family
partie. S'il a été déclaré en majuscule, vous pouvez l'utiliser comme ceci:la source
config.assets.precompile += %w( .svg .eot .woff .ttf )
est en fait faux, vous devez ajouter pour précompiler quelque chose qui correspond au nom complet de l'actif. Un regexp a fonctionné pour moi:config.assets.precompile << /\.(?:svg|eot|woff|ttf)$/
config.assets.paths
est pour les références Sprockets, non pertinent ici.config.assets.precompile
est également inutile parce que "Le matcher par défaut pour la compilation des fichiers comprend application.js, application.css et tous les fichiers non JS / CSS (cela inclura automatiquement tous les actifs d'image) des dossiers app / assets" (voir ici )Maintenant, voici une torsion:
- @plapier, penséebot / bourbon
- @jhilden, penséebot / bourbon
Je l'ai également testé sur
rails 4.0.0
. En fait, la dernière ligne est suffisante pour précompiler en toute sécurité les polices à partir duvendor
dossier. Il a fallu quelques heures pour le comprendre. J'espère que cela a aidé quelqu'un.la source
app.config.assets.paths << Rails.root.join('vendor', 'assets', 'fonts')
app.config.assets.precompile << /\.(?:svg|eot|woff|ttf)$/
Un commentaire sur une autre réponse indique que ce dernier s'occupe des deux.app/assets
entrée des sprockets et des amis est traitée comme une sortiepublic/assets
, alors qu'ellevendor/assets
peut toujours être utile pour déployer des actifs sans modification; les deux ont leurs cas d'utilisation. Toute la convention de vente repose sur la garantie que rien ne se passeravendor/*
. (Oui, avendor/plugins
été abusé avec la thésaurisation de code, l'ère pré-maniaque de la manie à source fermée et les gens viennent de copier-coller les js non versionnés dansvendor/assets/javascripts
les actifs de pré-bower / rails.)config/initializers/assets.rb
Si vous ne souhaitez pas suivre le déplacement de vos polices:
la source
config.assets.precompile << /\.(?:svg|eot|woff|ttf)$/
Vous devez utiliser
font-url
dans votre bloc @ font-face, pasurl
ainsi que cette ligne dans application.rb, comme vous l'avez mentionné (pour les polices
app/assets/fonts
la source
src: url(someFont.ttf)
et asrc: font-url(someFont.ttf)
fonctionné lorsque des fichiers sont entrésapp/assets/fonts
. J'ai des.scss
extensions par défaut. Je n'avais pas besoin d'ajouter aux config.assets.paths.Voici mon approche de l'utilisation des polices dans le pipeline d'actifs:
1) Mettez tout votre fichier de polices sous
app/assets/fonts/
, en fait vous n'êtes pas limité à le mettre sousfonts
le nom du dossier. Vous pouvez mettre n'importe quel nom de sous-dossier que vous aimez. Par exempleapp/assets/abc
ouapp/assets/anotherfonts
. Mais je vous recommande fortement de le mettre sousapp/assets/fonts/
pour une meilleure structure de dossiers.2) À partir de votre fichier sass, utilisez l'assistant sass
font-path
pour demander vos ressources de police comme ceci3) Exécutez à
bundle exec rake assets:precompile
partir de votre ordinateur local et voyez le résultat de votre application.css. Vous devriez voir quelque chose comme ceci:Si vous souhaitez en savoir plus sur le fonctionnement du pipeline d'actifs, vous pouvez visiter le guide simple suivant: https://designcode.commandrun.com/rails-asset-pipeline-simple-guide-830e2e666f6c#.6lejlayk2
la source
J'avais ce problème sur Rails 4.2 (avec ruby 2.2.3) et j'ai dû éditer le partiel _paths.scss de font-awesome pour supprimer les références
$fa-font-path
et supprimer une barre oblique avant. Ce qui suit était cassé:Et les œuvres suivantes:
Une alternative serait de simplement supprimer la barre oblique suivant l'interpolation
$fa-font-path
puis de définir$fa-font-path
comme une chaîne vide ou un sous-répertoire avec une barre oblique finale (si nécessaire).N'oubliez pas de recompiler les actifs et de redémarrer votre serveur si nécessaire. Par exemple, sur une configuration passager:
Rechargez ensuite votre navigateur.
la source
J'utilise Rails 4.2 et je n'ai pas pu afficher les icônes de bas de page. De petites boîtes apparaissaient, au lieu du (+) sur les lignes effondrées et des petites flèches de tri que j'attendais. Après avoir étudié les informations ici, j'ai apporté une modification simple à mon code: supprimer le répertoire des polices dans css. Autrement dit, changez toutes les entrées css comme ceci:
ressembler à ceci:
Ça a marché. Je pense que Rails 4.2 assume déjà le répertoire des polices, donc en le spécifiant à nouveau dans le code CSS, les fichiers de polices ne sont pas trouvés. J'espère que cela t'aides.
la source
J'ai eu un problème similaire lorsque j'ai récemment mis à niveau mon application Rails 3 vers Rails 4. Mes polices ne fonctionnaient pas correctement comme dans Rails 4+, nous ne sommes autorisés à conserver les polices que dans le
app/assets/fonts
répertoire. Mais mon application Rails 3 avait une organisation de polices différente. J'ai donc dû configurer l'application pour qu'elle fonctionne toujours avec Rails 4+ ayant mes polices dans un autre endroit queapp/assets/fonts
. J'ai essayé plusieurs solutions mais après avoir trouvé des actifs non-stupides bijou d' , cela a rendu les choses si faciles.Ajoutez cette gemme en ajoutant la ligne suivante à votre Gemfile:
Exécutez ensuite:
Et enfin, ajoutez la ligne suivante dans votre fichier config / initializers / non_digest_assets.rb :
C'est ça. Cela a bien résolu mon problème. J'espère que cela aide quelqu'un qui a rencontré un problème similaire comme moi.
la source
Voici un dépôt qui illustre le fait de servir une police personnalisée avec Rails 5.2 qui fonctionne sur Heroku. Il va plus loin et optimise la diffusion des polices le plus rapidement possible selon https://www.webpagetest.org/
https://github.com/nzoschke/edgecors
Pour commencer, j'ai choisi des morceaux des réponses ci-dessus. Pour Rails 5.2+, vous ne devriez pas avoir besoin d'une configuration de pipeline d'actifs supplémentaire.
Pipeline d'actifs et SCSS
app/assets/fonts
@font-face
déclaration dans un fichier scss et utilisez l'font-url
aideDe
app/assets/stylesheets/welcome.scss
:Servir à partir de CDN avec CORS
J'utilise CloudFront, ajouté avec l' addon Heroku Edge .
Configurez d'abord un préfixe CDN et des en-
Cache-Control
têtes par défaut dansproduction.rb
:Si vous essayez d'accéder à la police de l'URL herokuapp.com à l'URL CDN, vous obtiendrez une erreur CORS dans votre navigateur:
Configurez donc CORS pour autoriser l'accès à la police de Heroku à l'URL CDN:
Serve gzip Font Asset
Le pipeline d'actifs crée un
.ttf.gz
fichier mais ne le sert pas. Ce patch de singe change la liste blanche gzip du pipeline d'actifs en liste noire:Le résultat final est un fichier de police personnalisé
app/assets/fonts
servi à partir d'un cache CloudFront de longue durée.la source
Dans mon cas, la question d'origine utilisait
asset-url
sans résultats au lieu de laurl
propriété CSS simple . L'utilisation aasset-url
fini par fonctionner pour moi dans Heroku. De plus, définir les polices dans le/assets/fonts
dossier et appelerasset-url('font.eot')
sans y ajouter de sous-dossier ni aucune autre configuration.la source
Si vous avez un fichier appelé scaffolds.css.scss, il y a une chance qui remplace toutes les choses personnalisées que vous faites dans les autres fichiers. J'ai commenté ce fichier et tout a soudainement fonctionné. S'il n'y a rien d'important dans ce fichier, vous pouvez aussi bien le supprimer!
la source
placez simplement vos polices dans le dossier app / assets / fonts et définissez le chemin de chargement automatique lorsque l'application commence à écrire le code dans application.rb
config.assets.paths << Rails.root.join ("app", "assets", "fonts") et
puis utilisez le code suivant dans css.
@ font-face {
}
Essaie.
Merci
la source