Glyphicon没有在Heroku中显示(以前是正常的)

时间:2014-06-27 23:31:35

标签: ruby-on-rails twitter-bootstrap heroku glyphicons

我有一个rails 4应用程序,一切都运行正常,直到现在,它只显示一个正方形而不是bootstrap glyphicon!我不知道为什么,我没有改变任何东西......我想要一个不同于`更改config.assets.precompile = true的解决方案,一旦它不是一个好的做法,你的应用程序将运行缓慢,如果你做到了。(见config.assets.compile=true in Rails production, why not?)。谢谢!

3 个答案:

答案 0 :(得分:3)

奥斯尼,让我为你解释一下这个问题。

-

资产预编译

Heroku precompiles your Rails assets,意味着您需要确保所有资产都是"预编译"在你推他们之前。我的意思是当你预编译你的资产时,Rails fingerprints(将散列值添加到文件名的末尾)。

这意味着,虽然您可能会通过他们的"静态"来引用您的资产。名称,您的应用将无法加载它们,因为它们将具有不同的名称。这是fonts don't work on Heroku for a lot of people

的主要原因之一

如果样式表中有自定义资源(例如字体),则需要确保以下几点:

  
      
  1. 资产在样式表中正确引用(使用SASS)
  2.   
  3. 资产在部署到Heroku时正确预编译
  4.   

我建议您执行以下操作:


<强> SASS

首先,请确保使用Rails asset path helpersasset_path / asset_url)引用任何依赖项:

#app/stylesheets/application.css.scss
.test { background: asset_url("your_background_image.png") }

这允许您设置相关文件路径,以便执行时使用预编译。它与你的字体相同(检查my answer);但是,您可能没有问题,因为您正在使用bootstrap;)

-

<强>预编译

当您precompile资产时,您只需要运行:

$ rake assets:precompile RAILS_ENV=production

这会将您的资产文件放在asset pipeline中,并允许您在Heroku上的生产应用程序中使用它们而不会出现问题

答案 1 :(得分:3)

因为你没有在本地编译你的资产,所以heroku试图编译它们但它失败了。 这叫做slug编译。

解决方案是在本地编译文件,并提交public/assets文件夹。 要做到这一点,你需要运行:

RAILS_ENV=production bundle exec rake assets:precompile

为什么heroku无法编译您的资产?可能是因为它在您的资源文件夹中检测到manifest文件,并且它假定您手动编译了资产。

答案 2 :(得分:0)

这对我有用。

<强> application.css.scss

@import "bootstrap-sprockets";
@import "bootstrap";