Heroku不使用资产文件作为基础图标

时间:2014-07-17 01:25:04

标签: ruby-on-rails heroku sass zurb-foundation

我正在使用这个gem,foundation-icons-sass-rails,根据他们的指示安装。 https://github.com/zaiste/foundation-icons-sass-rails

我正在部署到Heroku。

除了基础图标不起作用外,一切正常。

heroku日志报告"没有路由匹配[GET]" /assets/foundation-icons.svg"

配置/ development.rb:

config.assets.paths << Rails.root.join('app', 'assets', 'fonts')
config.assets.precompile += %w( .svg .eot .woff .ttf) 

配置/ production.rb

config.serve_static_assets = true

application.css.scss说:

/*
 *= require_tree .
 *= require_self
 *= require foundation_and_overrides

 */

 @import 'foundation-icons';

我做了rake资产:预编译并在我推送到Heroku之前添加到repo

我看到了文件&#34; foundation-icons-a2343234dblahblahblah.svg&#34;在公共/资产

为什么Heroku找不到它?不应该在公共/资产中寻找指纹文件,而不是简单的&#34; /assets/foundation-icons.svg"

编辑:

查看heroku的文档,我运行了heroku rails控制台 然后做了一个放置helper.asset_path(&#34; foundation-icons.css&#34;)并且它响应它只是寻找普通的非指纹文件。我怎么告诉我的应用程序需要查找指纹版本

2 个答案:

答案 0 :(得分:0)

您看到this post in the project's GitHub issues section了吗?这是一种解决方法,但是:

  

aardvarkk于5月21日发表评论

     

我能够在没有figaro宝石的情况下解决这个问题。我添加了以下内容:

     
    

config.relative_url_root = "/mysuburi"

  
     

到文件config/environments/production.rb。现在一切都按预期工作。这是> Rails v3.2.18。

否则,我会在那里开一个新问题。

答案 1 :(得分:0)

<强>字体

这可能没有直接帮助,但是当你引用字体&amp; Rails中的其他外部依赖项&#39;生产资产管道,您必须使用其中一个preprocessors来引用动态路径

正如您已经指出的那样,Rails自然会fingerprint它在资产压缩文件中编译的文件如下:

  

指纹识别是一种使文件名依赖的技术   关于文件的内容。当文件内容改变时,   文件名也被更改。对于静态或不经常的内容   改变了,这提供了一个简单的方法来判断是否有两个版本   文件是相同的,即使在不同的服务器或部署日期也是如此。

这意味着,如果您从CSS调用字体或图像,则无法使用默认的url语句:

#app/assets/stylesheets/application.css
body {
   background: url("your/background.png"); /* This won't work in production because of fingerprinting */
}

-

<强>预处理

看起来你已经在使用它了,所以也许这不会有帮助

但是当你在Rails&#39;中使用preprocessor (SCSS / SASS)时资产管道,您将能够使用Rails asset_path helpers

#app/assets/stylesheets/application.css.sass
body
   background: asset_url("your/background.png")

关于使用字体,我们按如下方式设置:

#app/assets/fonts/fonts.css.sass
@font-face
    font:
        family: 'Ionicons'
        weight: normal
        style: normal
    src: asset_url('layout/fonts/IonIcons/ionicons.eot?v=1.4.1')
    src: asset_url('layout/fonts/IonIcons/ionicons.eot?v=1.4.1#iefix') format('embedded-opentype'), asset_url('layout/fonts/IonIcons/ionicons.ttf?v=1.4.1') format('truetype'), asset_url('layout/fonts/IonIcons/ionicons.woff?v=1.4.1') format('woff'), asset_url('layout/fonts/IonIcons/ionicons.svg?v=1.4.1#Ionicons') format('svg')

我很欣赏这对你宝石的问题没有帮助。但是,根据上面的代码,您需要确保为资产设置了正确的网址。这将引用指纹资产文件,无论它们被称为什么:)