Rails компилирует активы как с хешем, так и без него, почему?

Я относительно новичок в RoR, и мне интересно, почему Rails компилирует активы как с хешем md5, так и без него?

Я запустил bundle exec rake assets:clean, затем bundle exec rake assets:precompile

Мой файл production.rb:

MyApp::Application.configure do

  # Code is not reloaded between requests

  config.cache_classes = true

  # Full error reports are disabled and caching is turned on

  config.consider_all_requests_local       = false

  config.action_controller.perform_caching = true

  # Disable Rails static asset server (Apache or nginx will already do this)

  config.serve_static_assets = false

  # Compress JavaScripts and CSS

  config.assets.compress = true

  # Don't fallback to assets pipeline if a precompiled asset is missed

  config.assets.compile = false

  # Generate digests for assets URLs

  config.assets.digest = true 

  config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx

  config.assets.precompile += %w(tos.js, tos.css)

  config.i18n.fallbacks = true

  config.active_support.deprecation = :notify

end

Мое приложение работает с файлами с хэшами в их именах и так, как должно быть в моем случае:)

Итак, у меня есть два вопроса:

1) Почему это происходит при компиляции?

Rails компилирует активы как с хешем md5, так и без него

2) Каковы эти файлы (без хэшей) для?

Может быть, я чего-то не получаю, поэтому, пожалуйста, кто-нибудь может объяснить.

Ответы

Ответ 1

Причина в том, что вы можете получить доступ к файлам, не зная отпечаток MD5 (например, в приложении без рельсов или файл в приложении rails, который не скомпилирован или запущен стек rails ( например, страница с ошибкой состояния 500/502). В этом случае вам придется скомпилировать активы, а затем изменить ссылки css/js в статических файлах HTML каждый раз, когда вы обновили код (таким образом, вызвав изменение хэш файла MD5).

Таким образом, вместо этого рельсы производят 2 копии каждого файла активов, один с отпечатком пальца в имени файла, а другой без (например, приложение-731bc240b0e8dbe7f2e6783811d2151a.css и application.css). Предпочитается предпочтительная версия с отпечатками пальцев (см. что такое отпечаток пальца и почему меня это беспокоит в путеводитель по каналам активов rails). Но непереваренная версия существует как резерв.

В качестве последней мысли по этому вопросу я прочитал следующий запрос на тягу к рельсам git repo: https://github.com/rails/rails/pull/5379 где они обсуждают плюсы и минусы непереваренных имен файлов и возможность отключить их компиляцию.

НТН