使用Rails 3.1 Asset Pipeline在web中存储webfonts

时间:2011-08-24 15:48:02

标签: ruby-on-rails ruby-on-rails-3.1 asset-pipeline

我正在尝试使用Rails 3.1 Asset Pipeline来存储我在多个应用程序中使用的一些字体。我已经尝试了几乎存储位置的每个组合,但我似乎无法让管道实际上拿起我的字体文件。当我运行public/assets时,它们会显示在rake assets:precompile中,但任何asset_path助手都无法使用它们,而我无法找出原因。

来自fonts.css.erb的示例:

@font-face {
    font-family: 'MuseoSans';
    src: url('<%= asset_path('museosans_500_italic_webfont.eot') %>');
    src: url('<%= asset_path('museosans_500_italic_webfont.eot?#iefix') %>') format('eot'),
         url('<%= asset_path('museosans_500_italic_webfont.woff') %>') format('woff'),
         url('<%= asset_path('museosans_500_italic_webfont.ttf') %>') format('truetype'),
         url('<%= asset_path('museosans_500_italic_webfont.svg#webfontcWw5DXpH') %>') format('svg');
    font-weight: normal;
    font-style: italic;

 }

ls app/assets/images的输出(自images以来assets/fonts无效,但两次都没有工作):

museosans_100_italic_webfont.eot  museosans_500_webfont.eot
museosans_100_italic_webfont.svg  museosans_500_webfont.svg
museosans_100_italic_webfont.ttf  museosans_500_webfont.ttf
museosans_100_italic_webfont.woff museosans_500_webfont.woff
museosans_100_webfont.eot         museosans_700_italic_webfont.eot
museosans_100_webfont.svg         museosans_700_italic_webfont.svg
museosans_100_webfont.ttf         museosans_700_italic_webfont.ttf
museosans_100_webfont.woff        museosans_700_italic_webfont.woff
museosans_300_italic_webfont.eot  museosans_700_webfont.eot
museosans_300_italic_webfont.svg  museosans_700_webfont.svg
museosans_300_italic_webfont.ttf  museosans_700_webfont.ttf
museosans_300_italic_webfont.woff museosans_700_webfont.woff
museosans_300_webfont.eot         museosans_900_italic_webfont.eot
museosans_300_webfont.svg         museosans_900_italic_webfont.svg
museosans_300_webfont.ttf         museosans_900_italic_webfont.ttf
museosans_300_webfont.woff        museosans_900_italic_webfont.woff
museosans_500_italic_webfont.eot  museosans_900_webfont.eot
museosans_500_italic_webfont.svg  museosans_900_webfont.svg
museosans_500_italic_webfont.ttf  museosans_900_webfont.ttf
museosans_500_italic_webfont.woff museosans_900_webfont.woff

我尝试过访问:

  • /assets/museosans_500_italic_webfont.svg
  • /assets/images/museosans_500_italic_webfont.svg
  • /images/museosans_500_italic_webfont.svg

它不会在任何地方捡到它。有什么想法吗?

3 个答案:

答案 0 :(得分:6)

您是否明确声明应该预编译字体文件?

config.assets.precompile + =%w(.js .css * .css.scss .svg .eot .woff .ttf)

这是开发,升级,生产,以上所有问题吗?

是否加载了@ font-face规则的样式表?

答案 1 :(得分:0)

你应该告诉asset_path你'资产'一种字体,这将修复你的目录问题:

url('<%= asset_path('museosans_500_italic_webfont.eot', font) %>');

如果这不起作用,application.css的浏览器输出是什么(我假设包含fonts.css)?

答案 2 :(得分:0)

如果您将字体粘贴在assets / images目录中,然后使用rake assets:precompile,rails会自动编译图像目录中的所有内容。

所以你所要做的就是在你的css中拨打正确的电话:

如果*.css.scss

font-url('museosans_500_italic_webfont.eot') format('eot')

注意:您可以使用font-url(参考rails guides

问题#1:添加您要提供的css文件(只有您在stylesheet_link_tag中实际调用的文件)config.assets.precompile += %w( application.css.scss application.js.coffee ect.css.sass)

陷阱#2:您需要指定摘要才能使其正常工作:

# Generate digests for assets URLs
config.assets.digest = true