Как дайджест отпечатка пальца вычисляется в Rails 4.2

Я использую Rails 4.2, и в документе говорится, что отпечаток пальца представляет собой дайджест md5, рассчитанный на основе содержимого скомпилированного файла.

Если мы возьмем файл, скажем application-4c697a2e67b1a921abbdc1f753c465d8.js, 4c697a2e67b1a921abbdc1f753c465d8 это дайджест MD5. Проблема в том, что мы никогда не сможем получить одно и то же значение, генерируя md5 из содержимого одного и того же файла.

Я где-то читал, что этот отпечаток не только зависит от файла, но также зависит от окружающей среды, а также от версии звездочек.

Может ли кто-то объяснить или перечислить вещи (помимо содержимого файла), которые используются для создания этого отпечатка пальца? И если кто-то может добавить ссылку на рельсы звездочки репо (желательно звездочки 2.12.5), это было бы очень полезно.

2 ответа

Решение

Это верно для Rails 4.2.x, не уверенного в других версиях

При создании md5 для файла используются три части (объединенные в одном и том же порядке).

  1. Звездочки:: VERSION.
  2. Rails.application.assets.version, сгенерированный здесь ( https://github.com/rails/sprockets-rails/blob/2.x/lib/sprockets/railtie.rb#L91).
  3. Содержимое скомпилированного файла.

Фактический расчет дайджеста в звездочках 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 метод.

Хороший вопрос; Я узнал кое-что, ища это.

Другие вопросы по тегам