Heroku Rails asset pipeline ne parvient pas à précompiler après avoir ajouté une police
j'essaie d'ajouter une police à mon application Rails c'est ce que j'ai fait:
ajouté des polices de caractères à:
-app
--assets
---fonts
SCSS:
@font-face {
font-family: LigatureSymbols;
src: font-url('LigatureSymbols211.eot');
src: local('LigatureSymbols'),
font-url('LigatureSymbols211.eot?#iefix') format('embedded-opentype'),
font-url('LigatureSymbols211.woff') format('woff'),
font-url('LigatureSymbols211.ttf') format('truetype'),
font-url('LigatureSymbols211.svg#LigatureSymbols') format('svg');
font-weight: normal;
font-style: normal;
}
production.rb
:
config.assets.paths << Rails.root.join('app', 'assets', 'fonts')
config.assets.precompile += %w( .svg .eot .woff .ttf )
mais quand j'appuie sur mon serveur de production Heroku je reçois ceci:
-----> Preparing app for Rails asset pipeline
Running: rake assets:precompile
I, [2013-05-06T06:21:07.804043 #2036] INFO -- : Writing /tmp/build_2snusxy9gm4d7/public/assets/LigatureSymbols211-c5b7db18fa0fcd910e92fee751776047.eot
I, [2013-05-06T06:21:07.809822 #2036] INFO -- : Writing /tmp/build_2snusxy9gm4d7/public/assets/LigatureSymbols211-09ff8be41a6bee98c834e9a278bb8b28.otf
I, [2013-05-06T06:21:07.812685 #2036] INFO -- : Writing /tmp/build_2snusxy9gm4d7/public/assets/LigatureSymbols211-1f682b1be252dbf6182d606a185b603f.svg
I, [2013-05-06T06:21:07.819262 #2036] INFO -- : Writing /tmp/build_2snusxy9gm4d7/public/assets/LigatureSymbols211-9e88765b872185b22e519da056cba9f0.ttf
I, [2013-05-06T06:21:07.829518 #2036] INFO -- : Writing /tmp/build_2snusxy9gm4d7/public/assets/LigatureSymbols211-a2d90ca6deff46bfcf9cade63d4902ce.woff
I, [2013-05-06T06:21:07.838351 #2036] INFO -- : Writing /tmp/build_2snusxy9gm4d7/public/assets/rails-5f9b3f343d9831cbf50b9bc980faf39b.png
I, [2013-05-06T06:21:17.072501 #2036] INFO -- : Writing /tmp/build_2snusxy9gm4d7/public/assets/application-6af5b81b9fcc820f1d43b4135f00317e.js
rake aborted!
undefined method `[]' for nil:NilClass
(in /tmp/build_2snusxy9gm4d7/app/assets/stylesheets/application.css)
j'ai essayé d'ajouter une ligne required
dans mon application.css
mais ça ne marcherait pas non plus.
EDIT:
je peux accéder à localhost:5000/assets/LigatureSymbols-2.11.eot
sur ma machine dev lors de l'exécution du serveur. Je ne sais pas si cela pourrait aider à réduire ce qui va mal
EDIT 2:
le code fonctionne avec la police SCSS commentée, y a-t-il une erreur de syntaxe?
EDIT 3:
C'est au sommet de la pile de traces:
.../sprockets-2.9.2/lib/sprockets/sass_functions.rb:63:in `sprockets_context'
.../sprockets-2.9.2/lib/sprockets/sass_functions.rb:42:in `font_url'
y a-t-il un problème avec mes appels font-url
?
EDIT 4:
supprime les tirets des noms de fichiers de police et change scss pour refléter, mais la même erreur persiste
EDIT 5:
CSS généré sur la machine locale:
@font-face {
font-family: LigatureSymbols;
src: font-url("LigatureSymbols211.eot");
src: local("LigatureSymbols"), font-url("LigatureSymbols211.eot?#iefix") format("embedded-opentype"), font-url("LigatureSymbols211.woff") format("woff"), font-url("LigatureSymbols211.ttf") format("truetype"), font-url("LigatureSymbols211.svg#LigatureSymbols") format("svg");
font-weight: normal;
font-style: normal; }
4 réponses
je l'ai trouvé! Chose la plus étrange... peut-être un bug dans le SASS.
si je mets le code directement dans le fichier home.css.scss
qui était requis dans mon application.css
, l'erreur se produirait.
de plus, si je place la police SCSS dans un fichier séparé ( font.scss
) et @import "font"
, cela soulèvera également une erreur.
Seulement si je font.scss
fichier dans mon application.css
est-ce que le pipeline de l'actif passerait.
il n'a pas d'importance si j'ai utilisé font-url(...)
vs asset-url(...,font)
vs url(asset-path(...,font))
ils fonctionnent tous quand la police a été incluse via un =require
dans le application.css
supprimer les tirets. Le pipeline assets utilise des traits d'Union pour prendre les empreintes digitales des actifs et le fait d'avoir des traits d'Union dans les chemins de police cause des problèmes.
j'ai exactement la même erreur quand j'ai oublié de changer l'extension du fichier de .les css .scss. Qu'il fixe pour moi.
ajoutez ceci à votre config/application.rb
config.assets.initialize_on_precompile = false
J'ai eu des problèmes similaires avec Heroku et cela a aidé parfois. Il vaut la peine d'essayer. Laissez-moi savoir si cela a aidé.