Rails资产管道和摘要值

有谁知道资产摘要值究竟是如何计算的? 如果我有两个JS文件,其中包含各种其他包含的JS脚本,那么如果没有更改内部脚本,那么每个文件是否会保持相同的摘要哈希值? 或者是每次资产:运行预编译操作时计算的新摘要值?

从导轨指南抓住

当文件名是唯一的并且基于其内容时,可以设置HTTP标头以鼓励各地的缓存(无论是在CDN,ISP,网络设备还是Web浏览器中)以保留其自己的内容副本。 更新内容后,指纹将发生变化。 这将导致远程客户端请求内容的新副本。 这通常称为缓存清除。

Rails用于指纹识别的技术是将内容的哈希值插入到名称中,通常在末尾。 例如,可以使用其内容MD5摘要重命名CSS文件global.css

接受的答案并不完全正确。 我们为登台,演示和生产服务器构建静态资产,并且在每种情况下为相同的资产提供不同的摘要值。

事实certificate,Rails环境也被考虑在内。 Sprockets创建摘要如下:

# Sprockets::Environment::initialize @digest_class = ::Digest::MD5 # Sprockets::Base::digest @digest ||= digest_class.new.update(VERSION).update(version.to_s) # Sprockets::Base::file_digest(path) digest.file(path.to_s) # Sprockets::Asset::initialize @digest = environment.file_digest(pathname).hexdigest 

Rails按如下方式挂钩到Sprockets:

 # Sprockets::Railtie app.assets = Sprockets::Environment.new(app.root.to_s) do |env| env.version = ::Rails.env + "-#{config.assets.version}" ... end 

因此rails创建了一个Sprockets环境,其版本等于Rails环境,Sprockets在创建摘要类时使用该版本。