Rails的静态资源管理(五)—— 自定义 Asset Pipeline
2017-06-20 10:59
204 查看
官方文档:http://guides.ruby-china.org/asset_pipeline.html
http://guides.rubyonrails.org/asset_pipeline.html
在 Gemfile 中添加
如果我们在 Gemfile 中添加了
默认情况下,Gemfile 中包含了 uglifier gem,这个 gem 使用 Ruby 包装 UglifyJS(使用 NodeJS 开发),作用是通过删除空白和注释、缩短局部变量名及其他微小优化(例如在可能的情况下把
使用
要使用
要使用这个压缩工具,需在
我们可以修改这个路径:
通过这种方式,在升级未使用 Asset Pipeline 但使用了
6
Apache 和 NGINX 支持
要想在升级现有应用时使用上述选项,可以把这两行代码粘贴到
http://guides.rubyonrails.org/asset_pipeline.html
1 压缩 CSS
压缩 CSS 的可选方式之一是使用 YUI。通过 YUI CSS 压缩器可以缩小 CSS 文件的大小。在 Gemfile 中添加
yui-compressorgem 后,通过下面的设置可以启用 YUI 压缩:
config.assets.css_compressor = :yui
如果我们在 Gemfile 中添加了
sass-railsgem,那么也可以使用 Sass 压缩:
config.assets.css_compressor = :sass
2 压缩 JavaScript
压缩 JavaScript 的可选方式有:closure、
:uglifier和
:yui,分别要求在 Gemfile 中添加
closure-compiler、
uglifier和
yui-compressorgem。
默认情况下,Gemfile 中包含了 uglifier gem,这个 gem 使用 Ruby 包装 UglifyJS(使用 NodeJS 开发),作用是通过删除空白和注释、缩短局部变量名及其他微小优化(例如在可能的情况下把
if…else语句修改为三元运算符)压缩 JavaScript 代码。
使用
uglifier压缩 JavaScript 需进行如下设置:
config.assets.js_compressor = :uglifier
要使用
uglifier压缩 JavaScript,就必须安装支持 ExecJS 的运行时。macOS 和 Windows 已经预装了此类运行时。
3 用 GZip 压缩静态资源文件
默认情况下,Sprockets 会用 GZip 压缩编译后的静态资源文件,同时也会保留未压缩的版本。通过 GZip 压缩可以减少对带宽的占用。设置 GZip 压缩的方式如下:config.assets.gzip = false # 禁止用 GZip 压缩静态资源文件
4 自定义压缩工具
在设置 CSS 和 JavaScript 压缩工具时还可以使用对象。这个对象要能响应compress方法,这个方法接受一个字符串作为唯一参数,并返回一个字符串。
class Transformer def compress(string) do_something_returning_a_string(string) end end
要使用这个压缩工具,需在
application.rb配置文件中做如下设置:
config.assets.css_compressor = Transformer.new
5 修改静态资源文件的路径
默认情况下,Sprockets 使用/assets作为静态资源文件的公开路径。
我们可以修改这个路径:
config.assets.prefix = "/some_other_path"
通过这种方式,在升级未使用 Asset Pipeline 但使用了
/assets路径的老项目时,我们就可以轻松为新的静态资源文件设置另一个公开路径。
6 X-Sendfile
首部
X-Sendfile首部的作用是让 Web 服务器忽略应用对请求的响应,直接返回磁盘中的指定文件。默认情况下 Rails 不会发送这个首部,但在支持这个首部的服务器上可以启用这一特性,以提供更快的响应速度。
Apache 和 NGINX 支持
X-Sendfile首部,启用方法是在
config/environments/production.rb配置文件中进行设置:
config.action_dispatch.x_sendfile_header = "X-Sendfile" # 用于 Apache config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # 用于 NGINX
要想在升级现有应用时使用上述选项,可以把这两行代码粘贴到
production.rb配置文件中,或其他类似的生产环境配置文件中。
相关文章推荐
- Rails的静态资源管理(一)——Asset Pipeline是什么
- 使用Asset Pipeline管理rails生产环境静态资源实现步骤
- Rails的静态资源管理(二)—— 如何使用 Asset Pipeline
- Rails的静态资源管理(四)—— 生产环境的 Asset Pipeline
- Rails的静态资源管理(三)—— 开发环境的Asset Pipelin
- Rails的静态资源管理(六)—— Asset Pipeline缓存存储方式、预处理、升级等
- Python+Flask.0009.FLASK静态资源之默认及自定义资源目录
- 京东前端工程化和静态资源管理全面总结
- 第 8 章 动态管理资源结合自定义登录页面
- Lua学习总结——用户自定义类型及资源管理
- (13)处理静态资源(自定义资源映射)【从零开始学Spring Boot】
- node.js系列(实例):原生node.js实现静态资源管理
- 京东前端工程化和静态资源管理全面总结
- 转:前端工程与性能优化(下):静态资源管理与模板框架
- 我们是如何做好前端工程化和静态资源管理
- Spring Boot处理静态资源(自定义资源映射)
- 自定义Filter过滤静态资源
- 前端工程精粹(二):静态资源管理与模板框架
- Rails 3.1 以后对静态文件的管理(Asset Pipeline)
- SpringMVC拦截器(静态资源和权限管理)