Как дайджест отпечатка пальца вычисляется в Rails 4.2
Я использую Rails 4.2, и в документе говорится, что отпечаток пальца представляет собой дайджест md5, рассчитанный на основе содержимого скомпилированного файла.
Если мы возьмем файл, скажем application-4c697a2e67b1a921abbdc1f753c465d8.js
, 4c697a2e67b1a921abbdc1f753c465d8
это дайджест MD5. Проблема в том, что мы никогда не сможем получить одно и то же значение, генерируя md5 из содержимого одного и того же файла.
Я где-то читал, что этот отпечаток не только зависит от файла, но также зависит от окружающей среды, а также от версии звездочек.
Может ли кто-то объяснить или перечислить вещи (помимо содержимого файла), которые используются для создания этого отпечатка пальца? И если кто-то может добавить ссылку на рельсы звездочки репо (желательно звездочки 2.12.5), это было бы очень полезно.
2 ответа
Это верно для Rails 4.2.x, не уверенного в других версиях
При создании md5 для файла используются три части (объединенные в одном и том же порядке).
- Звездочки:: VERSION.
- Rails.application.assets.version, сгенерированный здесь ( https://github.com/rails/sprockets-rails/blob/2.x/lib/sprockets/railtie.rb#L91).
- Содержимое скомпилированного файла.
Фактический расчет дайджеста в звездочках 2.x (для связанных активов) выполняется здесь BundledAsset#L30
Дайджест, кажется, построен здесь: https://github.com/rails/sprockets/blob/master/lib/sprockets/digest_utils.rb
Похоже, там много логики, но здесь можно найти ответ.
Похоже, что настоящий хеш создается путем вызова ADD_VALUE_TO_DIGEST[obj.class].call(obj, digest)
в build_digest
метод.
Хороший вопрос; Я узнал кое-что, ища это.