Очистка кеша с помощью nanoc

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

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

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

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


person raimohanska    schedule 24.01.2013    source источник


Ответы (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

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

person Stefan    schedule 25.01.2013
comment
Теперь, если у меня есть ссылки на мои версии файлов css, js, png в файлах html, css, будет ли nanoc работать с ними и обновлять ссылки, чтобы они соответствовали этим маршрутам? Это было бы круто. - person raimohanska; 26.01.2013

Специально для этого Арьян ван дер Гааг сделал жемчужину: 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

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

person iono    schedule 26.04.2013