Rails 4.2 Rails.application.config.assets.version не отменяет имена файлов активов дайджеста

У меня есть приложение Rails 4.2.4 (Ruby 2.2.2), и я обслуживаю статические ресурсы через Cloudfront.

Если Cloudfront обслуживает то, что вам не нужно, есть две возможности:

  • Недействительный контент в Cloudfront или
  • Изменить имя обслуживаемого ресурса

Однако, когда я меняю

Rails.application.config.assets.version = '1.0'

к

Rails.application.config.assets.version = '2.0'

(в config/initializers/assets.rb)

и

  • удалить все активы в общественных местах/активы

  • запустить "RAILS_ENV = пакетный пакет exec rake assets: precompile"

генерируются одинаковые имена файлов!

Единственный способ, которым я нашел недействительным переваренный файл application.scss, заключался в добавлении некоторого фиктивного контента, чтобы спровоцировать новую контрольную сумму md5.

Что я делаю неправильно?

Не следует ли изменять новые активы .version для переваренных имен файлов?

С наилучшими пожеланиями и спасибо!

Ответ 1

По комментарии в запросе на разрыв Rails, который я открыл, это регрессия, которая должна быть исправлена: https://github.com/rails/sprockets-rails/issues/240

Обновление. Как упоминает сансарп, одним из обходных решений, перечисленных в этой проблеме github, является использование старой версии звездочек:

gem 'sprockets', '< 3.0.0'

Другим обходным решением является использование пути к ресурсам в качестве кэширующего устройства:

# config/initializers/assets.rb
Rails.application.config.assets.prefix = "/assets/v1"

Ответ 2

Использование звездочек предыдущей версии может помочь вам получить имена файлов, как ожидалось. gem 'sprockets', '< 3.0.0' https://github.com/rails/sprockets

Ответ 3

Если вы используете capistrano для развертывания, обязательно установите assets_prefix в файле deploy.rb.

set :assets_prefix, "assets/v1"