Rails 4.1没有在Heroku上提供字体很棒的资产

时间:2014-09-24 20:34:18

标签: ruby-on-rails heroku font-awesome

我在Heroku上运行了一个rails 4.1 app,我看到了静态资产问题。 每当我的应用程序请求任何非svg版本的字体资源(由font-awesome-rails gem提供)时,它们都不会被提供。所有其他资产似乎都可以提供。

> curl http://myapp.herokuapp.com/assets/fontawesome-webfont-701cf412b1cf188f7e15450446d7cd04.ttf 
## gives 404 response even though the file exists in public/assets on heroku

> curl http://myapp.herokuapp.com/assets/fontawesome-webfont-4835d3d33b92d5c7c8c58149959d075d.svg 
## gives 200 response and serves the file

所有这些资产似乎都已成功预编译,并存储在public/assets(以下是heroku bash)。

$ ~/public/assets $ ls -l fontawesome-webfont-*

-rwx------ 1 u31786 31786 38205 2014-05-16 19:57 fontawesome-webfont-0c7d84c1c574b8bae138a7014e781a1c.eot
-rwx------ 1 u31786 31786 80652 2014-05-16 19:57 fontawesome-webfont-103111d81ddabc2cf4abea9d8a922fb8.ttf
-rwx------ 1 u31786 31786 202148 2014-05-16 19:57 fontawesome-webfont-1bc7b8f24d224d2cce2fdff63d829fb8.svg
-rwx------ 1 u31786 31786 253487 2014-07-04 02:17 fontawesome-webfont-434a869d64e7a46581d538486a8af044.svg
-rwx------ 1 u31786 31786 202148 2014-05-16 19:57 fontawesome-webfont-4835d3d33b92d5c7c8c58149959d075d.svg
-rwx------ 1 u31786 31786 44432 2014-05-16 19:57 fontawesome-webfont-4daf533148b5cd2067fa92a25d911a2b.woff
-rwx------ 1 u31786 31786 44432 2014-05-16 19:57 fontawesome-webfont-641588c6e43238bf5012415aa7d8f6c9.woff
-rwx------ 1 u31786 31786 141564 2014-07-04 02:17 fontawesome-webfont-701cf412b1cf188f7e15450446d7cd04.ttf
-rwx------ 1 u31786 31786 83760 2014-07-04 02:17 fontawesome-webfont-8613891d251955c3898dc19ee822a763.woff
-rwx------ 1 u31786 31786 72449 2014-07-04 02:17 fontawesome-webfont-97abc2bd68ee5cc83cf9f5386cfc7912.eot
-rwx------ 1 u31786 31786 38205 2014-05-16 19:57 fontawesome-webfont-b921a0d9014189177e286b16478a6680.eot
-rwx------ 1 u31786 31786 80652 2014-05-16 19:57 fontawesome-webfont-e21e874c038a38923c7e064e8606b135.ttf

似乎我不需要按照建议here将字体文件类型添加到config.assets.precompile(我试过,它没有帮助)。该资产似乎已成功预编译,因为它被放入public/assets,但不知何故不由Rails提供。

如果资产在public/assets中具有正确的权限,但是不能通过http从Heroku上的Rails获得?是否有任何其他Rails配置设置会影响这个?

感谢。

3 个答案:

答案 0 :(得分:1)

事实证明,我的应用程序有一个机架zippy中间件宝石版本,导致这些文件类型无法提供。 (与this相同)。升级宝石解决了这个问题。

答案 1 :(得分:0)

只需将字体添加到资源编辑

即可

配置/ production.rb

Rails.application.configure do
  . . .
  config.assets.precompile += %w( 
    *.svg *.eot *.woff *.ttf *.png *.jpg *.jpeg *.gif
  )
  . . .
end

答案 2 :(得分:0)

在尝试多种解决方案之后,我已经能够使用font-awesome.css中rails guide建议的资产助手来解决这个问题:

@font-face {
  font-family: 'FontAwesome';
  src: url('<%= asset_path("fontawesome-webfont.eot")%>?v=4.2.0');
  src: url('<%= asset_path("fontawesome-webfont.eot")%>?#iefix&v=4.2.0') format('embedded-opentype'),
       url('<%= asset_path("fontawesome-webfont.woff")%>?v=4.2.0') format('woff'),
       url('<%= asset_path("fontawesome-webfont.ttf")%>?v=4.2.0') format('truetype'),
       url('<%= asset_path("fontawesome-webfont.svg")%>?v=4.2.0#fontawesomeregular') format('svg');
  font-weight: normal;
  font-style: normal;
}

请记住将文件重命名为包含.ERB扩展名:font-awesome.css.erb

Rails Guides: The Asset Pipeline

2.3.1 CSS和ERB

资产管道自动评估ERB。这意味着如果您向CSS资产添加erb扩展名(例如,application.css.erb),那么CSS规则中会提供像asset_path这样的帮助程序:

.class {background-image:url(&lt;%= asset_path&#39; image.png&#39;%&gt;)} 这会将路径写入要引用的特定资产。在这个例子中,在一个资产加载路径中有一个图像是有意义的,例如app / assets / images / image.png,这里将引用它。如果此图像已作为指纹文件在公共/资源中可用,则引用该路径。

如果您想使用数据URI(一种将图像数据直接嵌入CSS文件的方法),您可以使用asset_data_uri帮助程序。

logo { background: url(<%= asset_data_uri 'logo.png' %>) } 这会将格式正确的数据URI插入CSS源。

请注意,结束标记不能是样式 - %&gt;。