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

Я относительно новичок в 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's 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, который не скомпилирован или не запущен стеком rails (например, 500). /502 страница ошибки состояния.) В этом случае вам придется компилировать ресурсы, а затем изменять ссылки css/js в статических HTML-файлах каждый раз, когда вы обновляете код (что приводит к изменению хеша MD5).

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

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

НТН

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