添加字体后,Heroku Rails资产管道无法预编译

我正在尝试在我的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) 

我试图在我的application.css添加一个required行,但这也行不通。

编辑:

运行服务器时,我localhost:5000/assets/LigatureSymbols-2.11.eot在我的开发机器上访问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; } 

我发现了! 最奇怪的事情……可能是SASS中的一个错误。

如果我将代码直接放在home.css.scss中需要的home.css.scss文件中,则会发生错误。

另外,如果我将字体SCSS放在一个单独的文件( font.scss )和@import "font"它也会引发错误。

只有当我在font.scss中需要font.scss文件时,资产管道才会通过。

如果我使用font-url(...) vs asset-url(...,font) vs url(asset-path(...,font))它们都可以正常工作在application.css a =require

删除连字符。 资产管道使用连字符对资产进行指纹识别,并且在字体路径中使用连字符会导致问题。

当我忘记将文件扩展名从.css更改为.scss时,我得到完全相同的错误。 那为我修好了。

将其添加到config/application.rb

 config.assets.initialize_on_precompile = false 

我和Heroku有类似的问题,这有时候会有所帮助。 值得一试。 如果有帮助,请告诉我。