Разрушение кэша с помощью нанокера

Как реализовать очистку кеша с помощью Nanoc?

Например, добавьте контрольные суммы MD5 ко всем ссылкам на ресурсы image/font/js/etc в файлах HTML и CSS. Например, если бы я имел index.html а также images/badger.jpgЯ хотел бы, чтобы ссылка на изображение на странице была изменена на что-то вроде

`href="images/badger.jpg?12345"`

предполагая, что 12345 будет правильным MD5 хешем badger.jpg.

2 ответа

Вы могли бы пойти на подход маршрутизации. Я рекомендую использовать фактически разные имена файлов вместо строки запроса - некоторые кэши http не будут кэшировать URL с помощью строки запроса.

route '/stylesheet/' do
  csum = [File.open(item[:filename]).read.checksum]
  # add other files you include from your stylesheet.less (if you use less)
  csum += Dir['content/styles/*'].select { |i| File.file?(i) }.map { |f| File.read(f).checksum }
  '/style-' + csum.checksum + '.css'
end

route '*' do
  ext = item[:extension]
  versionexts = ['css','js']

  if versionexts.include?(ext)
    # versioned filenames, depending on the checksum of the source file
    # these files shouldn't depend on other sources, or you have to checksum them too (see above)
    item.identifier.chop + '-' + File.read(item[:filename]).checksum + '.' + ext
  elsif item.binary?
    # Write item with identifier /foo/ to /foo.ext
    item.identifier.chop + '.' + ext
  else
    # Write item with identifier /foo/ to /foo/index.html
    item.identifier + 'index.html'
  end
end

Вы не можете использовать контрольную сумму сгенерированного содержимого в маршрутизации, так как маршрутизация выполняется до компиляции.

Арджан ван дер Гааг специально для этого сделал драгоценный камень: https://github.com/avdgaag/nanoc-cachebuster

Процитирую самого человека:

Использование простое, так как вам нужно только установить гем:

$ gem install nanoc-cachebuster 

и требуют драгоценный камень и включают помощников, чтобы начать:

# in default.rb
require 'nanoc3/cachebuster' 
include Nanoc3::Helpers::CacheBusting 

Теперь вы можете использовать метод #fingerprint в ваших правилах маршрутизации:

route '/assets/styles/' do
  item.identifier.chop + fingerprint(item) + '.' + item[:identifier]
end

Gem гарантирует, что ссылки на файлы, которые у вас есть, будут обновляться при компиляции вашего сайта.

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