我在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配置设置会影响这个?
感谢。
答案 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
资产管道自动评估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;。