Rails 4.2 指纹摘要如何计算
How does finger print digest gets calculated in Rails 4.2
我使用的是Rails 4.2 并且document 指出指纹是根据编译文件的内容计算的md5 摘要。
如果我们拿一个文件来说 application-4c697a2e67b1a921abbdc1f753c465d8.js
,4c697a2e67b1a921abbdc1f753c465d8
是 md5 摘要。问题是我们永远无法通过从同一文件的内容生成 md5 来获得相同的值。
我在某处看到,这个指纹不仅基于文件,还受到环境和链轮版本的影响。
有人可以解释或列出用于生成此指纹的东西(除了文件的内容)吗?如果有人可以添加来自 rails sprockets repo (preferably sprockets 2.12.5) 的参考,那将非常有帮助。
文摘似乎建在这里:https://github.com/rails/sprockets/blob/master/lib/sprockets/digest_utils.rb
看起来里面有很多逻辑,但这就是找到答案的地方。
看起来实际的散列是通过在 build_digest
方法中调用 ADD_VALUE_TO_DIGEST[obj.class].call(obj, digest)
创建的。
问得好;我在查找时学到了一些东西。
这适用于 Rails 4。2.x 不确定其他版本
针对文件生成 md5 涉及三个部分(按相同顺序串联)。
- 链轮::版本。
这里生成的- Rails.application.assets.version(https://github.com/rails/sprockets-rails/blob/2.x/lib/sprockets/railtie.rb#L91).
- 编译后的文件内容。
链轮 2.x 中的实际摘要计算(对于捆绑资产)正在此处完成 BundledAsset#L30
我使用的是Rails 4.2 并且document 指出指纹是根据编译文件的内容计算的md5 摘要。
如果我们拿一个文件来说 application-4c697a2e67b1a921abbdc1f753c465d8.js
,4c697a2e67b1a921abbdc1f753c465d8
是 md5 摘要。问题是我们永远无法通过从同一文件的内容生成 md5 来获得相同的值。
我在某处看到,这个指纹不仅基于文件,还受到环境和链轮版本的影响。
有人可以解释或列出用于生成此指纹的东西(除了文件的内容)吗?如果有人可以添加来自 rails sprockets repo (preferably sprockets 2.12.5) 的参考,那将非常有帮助。
文摘似乎建在这里:https://github.com/rails/sprockets/blob/master/lib/sprockets/digest_utils.rb
看起来里面有很多逻辑,但这就是找到答案的地方。
看起来实际的散列是通过在 build_digest
方法中调用 ADD_VALUE_TO_DIGEST[obj.class].call(obj, digest)
创建的。
问得好;我在查找时学到了一些东西。
这适用于 Rails 4。2.x 不确定其他版本
针对文件生成 md5 涉及三个部分(按相同顺序串联)。
- 链轮::版本。 这里生成的
- Rails.application.assets.version(https://github.com/rails/sprockets-rails/blob/2.x/lib/sprockets/railtie.rb#L91).
- 编译后的文件内容。
链轮 2.x 中的实际摘要计算(对于捆绑资产)正在此处完成 BundledAsset#L30