您的位置:首页 > Web前端 > CSS

Rails在production环境下css资源找不到路径的解决

2017-03-08 21:39 387 查看
Rails的生产环境下assets的名称里会嵌入md5散列,所以在生产环境中在css里直白的使用比如logo.img或../assets/dark.jpg之类的名称,就会发生找不到路径的错误!这个问题在开发环境下是没有的,因为开发环境不会修改assets名称.而且该问题在正常使用image_tag方法的rb文件里也是没有的,因为image_tag方法全帮你搞定了!

网上公认的解决方法是现将css文件加上scss后缀,然后将原来url变为image-url方法,如果是嵌入图片则变为asset-data-url(“logo.png”)方法:

Image specific helper:

background-image: image-url("logo.png")

Agnostic helper:

background-image: asset-url("logo.png", image)

background-image: asset-url($asset, $asset-type)


如果你是其他资源,比如说字体也可以用asset-url包装方法:

src: asset-url('DroidSans-webfont.eot');
src: local("Droid Sans"), asset-url('DroidSans-webfont.woff');


当然你要在production.rb里加上路径:

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


如果你足够细心,你会发现图片资源的路径已经帮你设置好了,在全局的application.rb里:

config.assets.precompile += %w(*.png *.jpg *.jpeg *.gif)


如果问题到这里就解决了,我就不写这篇微博了 ;)

实际情况是在我的系统(mac 10.11.6 + ruby 2.2.5 + rails 4.0.6)里,上述方法完全无效!

你还得在编译资源时加上RAILS_ENV=production前缀!!!难道编译资源到public中不是为了production环境吗?还非得明白的写出来吗 ;(

PS1:问题还有一种方法可以解决,就是在production.rb里开启资源编译选项:

config.assets.compile = true


将其设置为true的意思是,如果在production环境下找不到对应资源则退回到开发模式的assets路径里去寻找!不过这样做对性能是会有一定影响的,所以不建议使用.

PS2:网上还有一种解决方案是将css加.erb后缀,然后替换url方法,但是我测试也无效!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  rails css assets path image-url
相关文章推荐