2014-09-24 87 views
1

我有一个在Heroku上运行的rails 4.1应用程序,我看到一个静态资产问题。 每当我的应用程序请求任何非svg版本的字体资产(由font-awesome-rails宝石提供)时,它们都不会被提供。所有其他资产似乎服务良好。Rails 4.1在Heroku上不提供字体超赞的资产

> 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 

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

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

谢谢。

回答

1

原来,我的应用程序有一个版本的机架比比中间件宝石这会导致无法送达的文件类型的。 (与this相同)。升级宝石解决了这个问题。

0

只需添加字体资产编译

配置/ production.rb

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

我在我的问题中提到资产正在成功编译。默认情况下,Rails预编译“application.js,application.css和所有非JS/CSS”(来自Rails自动生成的application.rb中的注释) – stupakov 2014-09-26 06:07:43

0

尝试多种解决方案之后,我已经能够解决使用资产助手这个问题,因为在字体awesome.css建议导轨导向:

@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扩展:字体awesome.css.erb

Rails Guides: The Asset Pipeline

2.3.1 CSS和ERB

资产管道自动评估ERB。这意味着如果你添加一个erb扩展到一个CSS资源(例如application.css.erb),那么像asset_path这样的助手可以在你的CSS规则中使用:

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

如果您想要使用数据URI - 将图像数据直接嵌入CSS文件的方法 - 您可以使用asset_data_uri helper。

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

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

相关问题