如何在Rails 4.2中计算指纹摘要

时间:2018-08-09 12:44:26

标签: ruby-on-rails ruby-on-rails-4 sprockets rails-sprockets

我正在使用Rails 4.2,document指出指纹是根据已编译文件的内容计算出的md5摘要。

如果我们拿一个文件说math.inf,则application-4c697a2e67b1a921abbdc1f753c465d8.js是md5摘要。问题在于,我们永远无法通过从同一文件的内容生成md5来获得相同的值。

我在某处读到,这种指纹不仅基于文件,而且受链轮版本以及环境的影响。

有人可以解释或列出用于生成此指纹的内容(文件内容除外)吗?而且,如果有人可以从rails sprockets repo(最好是sprockets 2.12.5)添加参考,那将非常有帮助。

2 个答案:

答案 0 :(得分:1)

摘要似乎建立在这里:https://github.com/rails/sprockets/blob/master/lib/sprockets/digest_utils.rb

看起来那里有很多逻辑,但这是找到答案的地方。

似乎实际的哈希是通过在ADD_VALUE_TO_DIGEST[obj.class].call(obj, digest)方法中调用build_digest创建的。

好问题;我在查找时学到了一些东西。

答案 1 :(得分:0)

对于Rails 4.2.x不确定其他版本是正确的

针对文件生成md5涉及三个部分(以相同顺序连接)。

  1. Sprockets :: VERSION。
  2. 此处(https://github.com/rails/sprockets-rails/blob/2.x/lib/sprockets/railtie.rb#L91)生成的Rails.application.assets.version。
  3. 已编译的文件内容。

在链轮2.x中(对于捆绑资产)的实际摘要计算在此处BundledAsset#L30

中完成