ruby -- 进阶学习(十一)配置解决production环境下无法加载css或js
最近配置production环境,找了好几份文档,从傻逼到苦逼~~终于配置成功~~@_@!!!
首先,先加载以下几个插件:
# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0' # Use CoffeeScript for .js.coffee assets and views
gem 'coffee-rails', '~> 4.0.0'# Use jquery as the JavaScript library
gem 'jquery-rails' gem 'execjs'
# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks
gem 'turbolinks' # Use SCSS for stylesheets
gem 'sass-rails', '~> 4.0.0'
接着修改config/environment/production.rb,部分代码如下:
# Disable Rails's static asset server (Apache or nginx will already do this).
config.serve_static_assets = true # Compress JavaScripts and CSS.
config.assets.compress = true
config.assets.js_compressor = :uglifier
config.assets.css_compressor = :sass # Do not fallback to assets pipeline if a precompiled asset is missed.
config.assets.compile = false # Generate digests for assets URLs.
config.assets.digest = true
接着在config/application.rb中添加下面代码:
1 config.assets.precompile << Proc.new do |path|
if path =~ /\.(css|js|scss|png|jpg|gif|json)\z/
full_path = Rails.application.assets.resolve(path).to_path
app_assets_path1 = Rails.root.join('app', 'assets').to_path
app_assets_path2 = Rails.root.join('public', 'assets').to_path
app_assets_path3 = Rails.root.join('vendor', 'assets').to_path if full_path.starts_with? app_assets_path1
true
else
if full_path.starts_with? app_assets_path2
true
else
if full_path.starts_with? app_assets_path3
true
else
false
end
end
end
end
end
如果有其他文件需要添加的,上面代码自行修改添加。
在app/assets/javascripts/application.js
//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require_tree .
然后在开启服务器之前,在命令行输入 rake assets:precompile
Rails 会帮你把 assets 里的文件依照环境设定打包压缩放在 public/assets 目錄底下,所有的文件名称后会加入 MD5 的 fingerprinting 用來表示其內容供快取。
注:如果输入该命令行后发现无法加载css或js,或者是提示说.js文件已被加载,那么有可能是因为你的文件夹中还有别的application文件,里面的配置发生冲突。
接着开启服务器就可以了。。。
在配置过程中,由于存放在app/assets/images中的有些图片是被引用在css中的,而当你在命令行中运行了rake assets:percompile后,你会发现图片的文件名是被加密了,所以在css中无法找到图片,从而导致界面无法显示。
尝试过将图片路径进行修改,让它读取app/assets/images中的iphone.png,但是not working
会发现开启服务器后,在控制台那里可以看到读取不到图片的错误提示。而在public/assets中的图片由于文件名被加密,所以很难确定
后来由于自己很懒,就把要用到的图copy到public/assets中,上面贴的代码保持不变,然后就成功了。。。@_@|||
参考链接:
http://gogojimmy.net/2012/07/03/understand-assets-pipline/
http://ruby-china.org/topics/1415
http://ruby-china.org/topics/1414
http://ruby-china.org/topics/13216
ruby -- 进阶学习(十一)配置解决production环境下无法加载css或js的更多相关文章
- Django 学习笔记(三) --- HTML 模版加载 css、js、img 静态文件
人生苦短 ~ Tips:仅适用于 Python 3+(反正差别不大,py2 改改也能用).因为据 Python 之父 Guido van Rossum 说会在 2020 年停止对 Python 2 的 ...
- github不能访问、加载css、js解决办法
很奇怪,白天在公司还能正常访问github,晚上回来访问却有问题,表现症状是页面加载慢,并且页面样式明显错乱. 在chrome下用F12开发者工具一看,有2条css和2条js 404 了,猜想应该是g ...
- 在Heroku部署时,无法加载 css,js,图片资源解决办法
解决方案: 首先查看Gemfile, 确保group :production do 里添加了 gem "rails_12factor", '0.0.2' 然后在本地执行 rails ...
- 解决Tomcat无法加载css和js等静态资源文件
解决思路有两个 一是,你使用了Apache服务器,html不交给Tomcat处理,所以你找不到Html等静态资源,所以你先停掉阿帕奇,然后只用Tomcat猫试试. 二是,像我一样,使用了Jetty开发 ...
- github不能加载css、js解决办法
很奇怪,上午在公司还能正常访问github,晚点访问却有问题,页面样式明显错乱. 在FireFox下用F12开发者工具一看,有2条css和2条js 404 了,猜想应该是github的DNS被GFW污 ...
- linux环境下pdo加载问题
报错信息信息 PHP Warning: PHP Startup: Unable to load dynamic library ‘/usr/lib/php5/20121212/pdo_mysql.so ...
- ruby -- 进阶学习(九)定制错误跳转404和500
在开发阶段,如果发生错误时,都会出现错误提示页面,比如:RecordNotFound之类的,虽然这些错误方便开发进行debug,但是等产品上线时,如果还是出现这些页面,对于用户来说是很不友好的. 所以 ...
- 项目总结10:通过反射解决springboot环境下从redis取缓存进行转换时出现ClassCastException异常问题
通过反射解决springboot环境下从redis取缓存进行转换时出现ClassCastException异常问题 关键字 springboot热部署 ClassCastException异常 反射 ...
- RabbitMQ学习系列三:.net 环境下 C#代码订阅 RabbitMQ 消息并处理
上一篇已经讲了Rabbitmq如何在Windows平台安装 不懂请移步: RabbitMQ学习系列二:.net 环境下 C#代码使用 RabbitMQ 消息队列 一.理论 .net环境下,C#代码订阅 ...
随机推荐
- photoshop 快速切图
发现一个详细好方法:http://blog.csdn.net/zhangxiaowei_/article/details/42143307 具体如下:
- MDT 2010驱动管理新方法。
参考:https://4sysops.com/archives/driver-deployment-with-microsoft-deployment-toolkit-mdt-part-1-os-de ...
- 最近面试遇到的Windows相关的题目
上周准备在公司内部转岗,面了3个部门windows客户端相关的工作,最终拿到3个Offer,主要涉及C++和Windows两大块内容,C++的题目基本都答上了,Windows一直都是我的弱项,在这里记 ...
- ELK——Logstash 2.2 mutate 插件【翻译+实践】
官网地址 本文内容 语法 测试数据 可选配置项 mutate 插件可以在字段上执行变换,包括重命名.删除.替换和修改.这个插件相当常用. 比如: 你已经根据 Grok 表达式将 Tomcat 日志的内 ...
- 解决部份机型toast不显示问题
问题:部份机型不显示toast 解决方案: 1.自己在设置里面去允许通知,但是显然客户会说别的app都可以,so 2.自定义解决.查看toast的源码发现其附着在window上 源码下载地址:http ...
- c++中typename和class的区别介绍
"typename"是一个C++程序设计语言中的关键字.相当用于泛型编程时是另一术语"class"的同义词.这个关键字用于指出模板声明(或定义)中的非独立名称( ...
- Android开发(三十一)——重复引用包错误Conversion to Dalvik format failed
错误:Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define Landroid/sup ...
- java单例之enum实现方式
传统的两私有一公开(私有构造方法.私有静态实例(懒实例化/直接实例化).公开的静态获取方法)涉及线程安全问题(即使有多重检查锁也可以通过反射破坏单例), 目前最为安全的实现单例的方法是通过内部静态en ...
- Django 新人开发的十个注意点
总结一下 Django开发中,注意的事项,特别是新人,由于水平有限,也只能到这个层次,更多模式思想性的东西,还得在开发中慢慢体会. 1.各个APP独立,做到项目的模块分明.说的有点大,列几个列子优先 ...
- openssl - rsa加解密例程
原文链接: http://www.cnblogs.com/cswuyg/p/3187462.html openssl是可以很方便加密解密的库,可以使用它来对需要在网络中传输的数据加密.可以使用非对称加 ...