Разрушение кэша с помощью нанокера
Как реализовать очистку кеша с помощью 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 гарантирует, что ссылки на файлы, которые у вас есть, будут обновляться при компиляции вашего сайта.