官方文档:http://guides.ruby-china.org/asset_pipeline.html

http://guides.rubyonrails.org/asset_pipeline.html

1 静态资源文件缓存的存储方式

在开发环境和生产环境中,Sprockets 默认在 tmp/cache/assets 文件夹中缓存静态资源文件。修改这一设置的方式如下:

config.assets.configure do |env|
env.cache = ActiveSupport::Cache.lookup_store(:memory_store, { size: 32.megabytes })
end

禁用静态资源文件缓存的方式如下:

config.assets.configure do |env|
env.cache = ActiveSupport::Cache.lookup_store(:null_store)
end

2 通过 gem 添加静态资源文件

我们还可以通过 gem 添加静态资源文件。

为 Rails 提供标准 JavaScript 库的 jquery-rails gem 就是很好的例子。这个 gem 中包含了继承自 Rails::Engine 类的引擎类,这样 Rails 就知道这个 gem 中可能包含静态资源文件,于是会把其中的 app/assetslib/assets 和 vendor/assets 文件夹添加到 Sprockets 的搜索路径中。

3 使用代码库或 gem 作为预处理器

Sprockets 使用 Processors、Transformers、Compressors 和 Exporters 扩展功能。下述示例注册一个预处理器,在 text/css 文件(.css)默认添加一个注释。

module AddComment
def self.call(input)
{ data: input[:data] + "/* Hello From my sprockets extension */" }
end
end

有了修改输入数据的模块后,还要把它注册为指定 MIME 类型的预处理器:

Sprockets.register_preprocessor 'text/css', AddComment

4 从旧版本的 Rails 升级

从 Rails 3.0 或 Rails 2.x 升级时有一些问题需要解决。首先,要把 public/ 文件夹中的文件移动到新位置。关于不同类型文件储存位置的介绍

其次,要避免出现重复的 JavaScript 文件。从 Rails 3.1 开始,jQuery 成为默认的 JavaScript 库,Rails 会自动加载 jquery.js,不再需要手动把 jquery.js 复制到 app/assets 文件夹中。

再次,要使用正确的默认选项更新各种环境配置文件。

在 application.rb 配置文件中:

# 静态资源文件的版本,通过修改这个选项可以使原有的静态资源文件缓存全部过期
config.assets.version = '1.0' # 通过 onfig.assets.prefix = "/assets" 修改静态资源文件的路径

在 development.rb 配置文件中:

# 展开用于加载静态资源文件的代码
config.assets.debug = true

在 production.rb 配置文件中:

# 选择(可用的)压缩工具
config.assets.js_compressor = :uglifier
# config.assets.css_compressor = :yui # 在找不到已编译的静态资源文件的情况下,不退回到 Asset Pipeline
config.assets.compile = false # 为静态资源文件的 URL 地址生成指纹
config.assets.digest = true # 预编译附加的静态资源文件(application.js、application.css 和所有
# 已添加的非 JS/CSS 文件)
# config.assets.precompile += %w( admin.js admin.css )

Rails 4 及更高版本不会再在 test.rb 配置文件中添加 Sprockets 的默认设置,因此需要手动完成。需要添加的默认设置包括 config.assets.compile = trueconfig.assets.compress = falseconfig.assets.debug = false 和 config.assets.digest = false

最后,还要在 Gemfile 中加入下列 gem:

gem 'sass-rails',   "~> 3.2.3"
gem 'coffee-rails', "~> 3.2.1"
gem 'uglifier'

Rails的静态资源管理(六)—— Asset Pipeline缓存存储方式、预处理、升级等的更多相关文章

  1. Rails的静态资源管理(四)—— 生产环境的 Asset Pipeline

    官方文档:http://guides.ruby-china.org/asset_pipeline.html http://guides.rubyonrails.org/asset_pipeline.h ...

  2. Rails的静态资源管理(一)——Asset Pipeline是什么

    官方文档:http://guides.ruby-china.org/asset_pipeline.html http://guides.rubyonrails.org/asset_pipeline.h ...

  3. Rails的静态资源管理(五)—— 自定义 Asset Pipeline

    官方文档:http://guides.ruby-china.org/asset_pipeline.html http://guides.rubyonrails.org/asset_pipeline.h ...

  4. Rails的静态资源管理(二)—— 如何使用 Asset Pipeline

    官方文档:http://guides.ruby-china.org/asset_pipeline.html http://guides.rubyonrails.org/asset_pipeline.h ...

  5. Rails的静态资源管理(三)—— 开发环境的Asset Pipelin

    官方文档:http://guides.ruby-china.org/asset_pipeline.html http://guides.rubyonrails.org/asset_pipeline.h ...

  6. 使用Asset Pipeline管理rails生产环境静态资源实现步骤

    1.    修改项目中指向静态资源文件的链接 a)     访问静态资源文件 <%= stylesheet_link_tag "application", media: &q ...

  7. 已有项目使用Asset Pipeline管理静态资源

    1.    修改项目中指向静态资源文件的链接 a) 访问静态资源文件 <%= stylesheet_link_tag "application", media: " ...

  8. Ruby Rails学习中:Sass 和 Asset Pipeline,布局中的链接(Rails路由,具名路由),用户注册: 第一步

    接上篇: 一.Sass 和 Asset Pipeline Rails 中最有用的功能之一是 Asset Pipeline, 它极大地简化了静态资源文件(CSS.JavaScript 和图像)的生成和管 ...

  9. NodeJS中的静态资源管理服务

    欢迎大家指导与讨论 : ) 一.什么是静态资源 静态资源就是放在服务器中的特定的文件.比较常见的有.css,.png, .js的这一些后缀的文件.下图中的这个html页面便要获取到logo.png和a ...

随机推荐

  1. .NET及JAVA 中如何使用代码启动程序

    .NET 中: System.Diagnostics.Process.Start("应用程序");    JAVA中: ProcessBuilder pb=new ProcessB ...

  2. spring mvc 对象型参数的传递(遇到坑了)

    直接来个列子: 这里设置了,contenType="application/json" 这里post 接收的参数对象. 但是问题来了: <html> <head& ...

  3. hive学习7(条件函数case)

    case函数 语法: CASE WHEN a THEN b [WHEN c THEN d]* [ELSE e] END 说明:如果a为TRUE,则返回b:如果c为TRUE,则返回d:否则返回e 实例 ...

  4. nodejs mysql 创建连接池

    用Nodejs连接MySQL 从零开始nodejs系列文章,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发.Nodejs框架是基于V8的引擎,是目前速度最快的Javas ...

  5. hdoj1005--Number Sequence

    Problem Description A number sequence is defined as follows: f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1 ...

  6. Java中finally关键字的使用(转)

    与其他语言的模型相比,finally 关键字是对 Java 异常处理模型的最佳补充.finally 结构使代码总会执行,而不管有无异常发生.使用 finally 可以维护对象的内部状态,并可以清理非内 ...

  7. java:IO:file 类

    刷某一目录下的所有文件夹/文件 public class FileDemo2 { public static void main(String args[]) { File file = new Fi ...

  8. nyoj-451-光棍节的快乐(错排公式)

     题目链接 /* Name:nyoj-451-光棍节的快乐 Copyright: Author: Date: 2018/4/25 16:44:47 Description:D(n)=(n-1)*(D( ...

  9. Codeforces Round #259(div2)C(数学期望)

    数学题. 关键是求最大值为k时有多少种情况,结果是kn-(k-1)n-1.可以这么想:每一次都从1至k里选,共kn种,这里需要再减去每一次都从1至k-1里面选的情况.当然也可以分类计数法:按出现几次k ...

  10. linux shell 学习笔记--内部命令学习

    .基本命令 新手必须要掌握的初级命令 ls 基本的列出所有文件的命令.但是往往就是因为这个命令太简单,所以我们总是低估它.比如 ,用 -R 选项,这是递归选项,ls 将会以目录树的形式列出所有文件, ...