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”)方法:
如果你是其他资源,比如说字体也可以用asset-url包装方法:
当然你要在production.rb里加上路径:
如果你足够细心,你会发现图片资源的路径已经帮你设置好了,在全局的application.rb里:
如果问题到这里就解决了,我就不写这篇微博了 ;)
实际情况是在我的系统(mac 10.11.6 + ruby 2.2.5 + rails 4.0.6)里,上述方法完全无效!
你还得在编译资源时加上RAILS_ENV=production前缀!!!难道编译资源到public中不是为了production环境吗?还非得明白的写出来吗 ;(
PS1:问题还有一种方法可以解决,就是在production.rb里开启资源编译选项:
将其设置为true的意思是,如果在production环境下找不到对应资源则退回到开发模式的assets路径里去寻找!不过这样做对性能是会有一定影响的,所以不建议使用.
PS2:网上还有一种解决方案是将css加.erb后缀,然后替换url方法,但是我测试也无效!
网上公认的解决方法是现将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方法,但是我测试也无效!
相关文章推荐
- 前端资源多个产品整站一键打包&包版本管理(四)—— js&css文件文件打包并生成哈希后缀,自动写入路径、解决资源缓存问题。
- IOS开发(7)WKWebView加载本地HTML、CSS、JS文件JS(解决html内访问其他资源路径问题)
- win8安装 railsinstaller 之后检测rails -v,报找不到路径解决办法
- vue+webpack解决css引用图片打包后找不到资源文件的问题
- Nginx 安装及配置负载均衡https网站及转发后页面js、css等路径找不到问题解决
- ruby -- 进阶学习(十一)配置解决production环境下无法加载css或js
- vue-cli中解决css引用图片打包后找不到文件资源的问题
- 解决:“LIB 环境变量”中指定的搜索路径 *** 无效 --“系统找不到指定的路径。”
- 在非web环境下,直接用java命令行运行程序时,对于通过getResources找不到jar包中的资源和目录的解决方法
- LIB环境变量中指定的搜索路径:“C:/Program Files/Microsoft Visual Studio/VC98/mfc/lib 系统找不到找定的路径的解决方法
- 详谈vue+webpack解决css引用图片打包后找不到资源文件的问题
- rails 4 中 因为secret key 引起在production环境下无法访问 应用的解决办法
- nginx反向代理时通过rewrite解决后端资源css/js/img 写了绝对路径的问题
- 共享访问时提示“找不到网络路径”的解决方法
- “LIB 环境变量”中指定的搜索路径"%LIB%"无效 "错误的解决方法
- "加入域,找不到网络路径"的解决办法
- samba 找不到网络路径 的解决办法.
- 解决在Eclipse环境下开发J2ME时图片路径的问题
- 【Vegas原创】Linux5下安装VMWare增强工具时,c header文件路径找不到解决方法
- 解决CPU部分资源被占用,而任务栏中却找不到哪个进程占用这部分资源