5

我正在尝试向我的 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; }
4

4 回答 4

4

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

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

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

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

font-url(...)如果我使用vs asset-url(...,font)vs没关系,url(asset-path(...,font)) 当字体通过 a 包含=requireapplication.css

于 2013-05-08T05:28:32.510 回答
2

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

于 2013-05-06T06:11:46.137 回答
2

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

于 2014-04-03T20:47:25.923 回答
0

将此添加到您的config/application.rb

config.assets.initialize_on_precompile = false

我在 Heroku 上遇到过类似的问题,这有时会有所帮助。这值得一试。让我知道这是否有帮助。

于 2013-05-06T05:32:07.983 回答