Ruby on rails 4 字体:未加载预编译字体

Ruby on rails 4 字体:未加载预编译字体,ruby-on-rails-4,font-awesome,Ruby On Rails 4,Font Awesome,我在我的应用程序中使用字体awesome rails gem,所有这些都在开发中,但是在生产中部署时,字体不会显示出来。我曾尝试在生产站点上浏览/assets/fontawesome webfont.eot,但发现404未找到错误。查看服务器,我可以看到字体是用不同的名称预编译的-例如/assets/fontawesome-webfont-e732c0065276ad722bded99096afaa19.eot 我有 *= require font-awesome 在my applicatio

我在我的应用程序中使用字体awesome rails gem,所有这些都在开发中,但是在生产中部署时,字体不会显示出来。我曾尝试在生产站点上浏览/assets/fontawesome webfont.eot,但发现404未找到错误。查看服务器,我可以看到字体是用不同的名称预编译的-例如/assets/fontawesome-webfont-e732c0065276ad722bded99096afaa19.eot

我有

*= require font-awesome
在my application.css文件中的行,当查看编译的css文件时,可以看到它包括:

Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome
 *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
 */@font-face{font-family:'FontAwesome';src:url("/assets/fontawesome-webfont.eot?v=4.2.0");src:url("/assets/fontawesome-webfont.eot?#iefix&v=4.2.0") format("embedded-opentype"),url("/assets/fontawesome-webfont.woff?v=4.2.0") format("woff"),url("/assets/fontawesome-webfont.ttf?v=4.2.0") format("truetype"),url("/assets/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular") format("svg");
问题似乎在于assets文件夹中的文件与css调用中的文件名之间的差异


我不知道如何在CSS中调用这些字体文件,因为每次预编译时文件名都会更改。

发生的事情是Rails为您的资产(在本例中为字体文件)提供了一个唯一的名称。更新资源时,这将确保用户的浏览器不会缓存旧文件

正如您所观察到的,CSS文件没有使用唯一的名称。这是因为Rails不知道如何更新该引用

有几种方法可以使用;我在这里讲两个

使用资产助手 为此,您需要将静态CSS文件重命名为ERB文件(即,将
stylesheet.CSS
重命名为
stylesheet.CSS.ERB
)。然后在字体参考中:

@font-face{
  font-family:'FontAwesome';
  src:url("/assets/fontawesome-webfont.eot?v=4.2.0");
  src:url("/assets/fontawesome-webfont.eot?#iefix&v=4.2.0") format("embedded-opentype"),
    url("/assets/fontawesome-webfont.woff?v=4.2.0") format("woff"),
    url("/assets/fontawesome-webfont.ttf?v=4.2.0") format("truetype"),
    url("/assets/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular") format("svg");
您将使用:

url()
url()
url()
在运行时,rails将处理唯一的名称并在CSS中插入正确的值

使用CDN 对于一些常见的资产,如一些字体、jQuery等,使用CDN可能是有意义的。通过外部引用,Rails不会重命名文件您的用户可能会从缓存中获益

当我搜索“cdn”时,我会得到一个链接

url(<%= asset_path 'fontawesome-webfont.woff' %>)
url(<%= asset_path 'fontawesome-webfont.ttf' %>)
url(<%= asset_path 'fontawesome-webfont.svg' %>)