我正在尝试为我的Rails应用添加字体,这就是我所做的:
添加字体:
-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 )
但是当我推送到我的Heroku生产服务器时,我得到了这个:
-----> 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)
我尝试在required
中添加application.css
行,但这也行不通。
修改
运行服务器时,我可以在我的开发机器上访问localhost:5000/assets/LigatureSymbols-2.11.eot
。不确定这是否有助于缩小出错的地方
编辑2:
代码使用SCSS字体注释掉,是否存在语法错误?
编辑3:
这是跟踪堆栈的顶部:
.../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'
我的font-url
电话有问题吗?
编辑4:
从字体文件名中删除短划线并更改scss以反映,但同样的错误仍然存在
编辑5:
在本地计算机上生成CSS:
@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; }
答案 0 :(得分:4)
我发现了!最奇怪的事情......可能是SASS中的一个错误。
如果我将代码直接放在home.css.scss
所需的文件application.css
中,则会发生错误。
此外,如果我将字体SCSS放在单独的文件(font.scss
)和@import "font"
中,它也会引发错误。
仅如果我在font.scss
中需要application.css
文件,则资产管道会通过。
如果我使用font-url(...)
vs asset-url(...,font)
vs url(asset-path(...,font))
并不重要,当=require
中的application.css
包含该字体时,它们都可以正常工作
答案 1 :(得分:2)
删除连字符。资产管道使用连字符对资产进行指纹识别,并且在字体路径中使用连字符会导致问题。
答案 2 :(得分:2)
当我忘记将文件扩展名从.css更改为.scss时,我得到完全相同的错误。这为我解决了。
答案 3 :(得分:0)
将此添加到您的config/application.rb
config.assets.initialize_on_precompile = false
我和Heroku有过类似的问题,这有时会有所帮助。 值得一试。如果有帮助,请告诉我。