您基本上遇到了使用 Rails 资产管道预编译功能的陷阱之一,您的图像和其他媒体将被赋予哈希值;并且这些资产的任何引用都必须是动态的以适应
您遇到的问题是,当您预编译资产时,.css 文件中的静态链接仅指向url(/assets/image.png)
. asset_path
但是,您真正需要的是使用orasset_url
助手动态呈现该链接
解决方案是SCSS
我们遇到了这个问题(我们使用asset sync
gem),并发现解决它的最佳方法是使用 SCSS 动态呈现您的资产路径。这是我们的一些代码:
#app/assets/stylesheets/application.css.scss (yes, you should change it)
@import 'layout/fonts';
#app/assets/stylesheets/layout/fonnts.css.scss
@font-face {
font-family: 'akagi';
src: asset_url('fonts/akagi-th-webfont.eot');
src: asset_url('fonts/akagi-th-webfont.eot?#iefix') format('embedded-opentype'),
asset_url('fonts/akagi-th-webfont.woff') format('woff'),
asset_url('fonts/akagi-th-webfont.ttf') format('truetype'),
asset_url('fonts/akagi-th-webfont.svg#akagithin') format('svg');
font-weight: 300;
font-style: normal;
}
看看我们怎么用asset_url
?
这使 rake 能够在编译时定义资产的新路径,而不是旧路径;这意味着当您运行时,rake assets:precompile
您将获得所有正确的参考。
每当我们编译我们的资产时,我都会推荐使用这个预编译过程:
rake assets:precompile RAILS_ENV=production
...当您上传到 Heroku 时:
heroku run rake assets:precompile --app [your app]