一直在 development 环境下开发,一直无问题。 切换到 production 环境,然后运行 rake assets:precompile 会将 assets 文件重命名
代码中如果是这样的话,没问题。
<%= image_tag 'slides/1.jpg' %>
ruby 直接帮我把生成出来的 img 标签的图片地址也改成重命名后的了。
但是在 css 中的,不知道如何处理
.content{background: url(/assets/index_backgroud.png) no-repeat ; }
/assets/index_backgroud.png 这个会导致加载不到图片(因为被重命名了)
求教,怎么破?
mv xxx.css xxx.css.erb
.content{background: url(<%= asset_path 'xxxx.png' %>) no-repeat ; }
#3 楼 @mahone3297 最好是独立出来吧,html、css 以及 js 各司其职。还有上面说的问题,建议遵从 rails guides 的规范,使用 scss 文件即可:
2.3.2 CSS and Sass When using the asset pipeline, paths to assets must be re-written and sass-rails provides -url > and -path helpers (hyphenated in Sass, underscored in Ruby) for the following asset classes: image, font, video, audio, JavaScript and stylesheet.
image-url("rails.png") becomes url(/assets/rails.png) image-path("rails.png") becomes "/assets/rails.png"
你只要将你的代码改为:
/* xxx.css.scss */
.content {
background: image-url('index_backgroud.png') no-repeat ;
}
即可
mv xxx.css xxx.css.erb
.content{background: url(<%= asset_path 'xxxx.png' %>) no-repeat ; }
我已经做了这 2 步操作了,为什么这个 asset_path 好像没起作用,生成的 css 仍然是
.content{background: url(/assets/index_backgroud.png) no-repeat ;}
/* xxx.css.scss */
.content {
background: image-url('index_backgroud.png') no-repeat ;
}
改成这样,生成的 css 应该是这样 url(index_backgroud.png),无法指向 compile 过的带 md5 的文件。。。
#6 楼 @mahone3297 你是已经试过了还是只是你的猜测觉得不行?我的试验结果是可以的,scss 文件预编译的时候会自动替换 image-path 指定的文件所对应的预编译的版本。 我的试验代码是:
/* app/assets/stylesheets/home.css.scss */
.cartoon {
width: 600px;
height: 648px;
background: image-url('cartoon.jpg') no-repeat;
}
执行预编译后,在 production 环境下启动 rails server,结果是正常显示背景图的,而且这段 scss 代码变为了:
.cartoon {
width: 600px;
height: 648px;
background: url(/assets/cartoon-2d324851aeef0cc7d25d8615bef2cd88.jpg) no-repeat;
}
注意 文件名的改变。image-url('cartoon.jpg')
部分被换成了url(/assets/cartoon-2d324851aeef0cc7d25d8615bef2cd88.jpg)
。