我有一个rails 4应用程序,一切都运行正常,直到现在,它只显示一个正方形而不是bootstrap glyphicon!我不知道为什么,我没有改变任何东西......我想要一个不同于`更改config.assets.precompile = true的解决方案,一旦它不是一个好的做法,你的应用程序将运行缓慢,如果你做到了。(见config.assets.compile=true in Rails production, why not?)。谢谢!
答案 0 :(得分:3)
奥斯尼,让我为你解释一下这个问题。
-
资产预编译
Heroku precompiles your Rails assets,意味着您需要确保所有资产都是"预编译"在你推他们之前。我的意思是当你预编译你的资产时,Rails fingerprints(将散列值添加到文件名的末尾)。
这意味着,虽然您可能会通过他们的"静态"来引用您的资产。名称,您的应用将无法加载它们,因为它们将具有不同的名称。这是fonts don't work on Heroku for a lot of people。
的主要原因之一如果样式表中有自定义资源(例如字体),则需要确保以下几点:
- 资产在样式表中正确引用(使用SASS)
- 资产在部署到Heroku时正确预编译
醇>
我建议您执行以下操作:
<强> SASS 强>
首先,请确保使用Rails asset path helpers(asset_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";