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 где они обсуждают плюсы и минусы непереваренных имен файлов и возможность отключить их компиляцию.
НТН