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

    xiaoxiao2021-03-25  142

    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方法,但是我测试也无效!

    大熊猫侯佩 认证博客专家 Swift Objective-C Xcode 非自由程序员,博客认证专家。汇编板块版主, 其他开发语言大版版主。对App、以及Cocos2D、SpriteKit游戏开饶有兴趣。目前常用的语言是ObjC、Swift、Ruby等。不过看到编程艺术、ASM、逆向和C时依然欲罢不能。虽然不是,但喜欢黑客的思维和哲学,认为社会工程学很酷,但还没有实际用来撩过妹。
    转载请注明原文地址: https://ju.6miu.com/read-7268.html

    最新回复(0)