Изображение не скопировано Jekyll-Assets

Я использую Jekyll-Assets для управления конвейером активов для проекта jekyll. У меня есть ссылки на несколько разных изображений в файле index.html:

<img src="{% asset_path slides/slide-1.jpg %}"

Исходные изображения находятся в _assets/images/slides. В моем файле _config.yml это настроено для источников:

sources:
- _assets/images

Одно из пяти изображений в каталоге _assets/slides не копируется в целевой _site/assets/slides. Остальные четыре копируются правильно. Я убедился, что один и тот же тег img и тег жидкости используются для всех пяти изображений (см. выше).

Однако я также пробовал:

sources:
- _assets/images
- _assets/images/slides

Я попытался переименовать изображение, а также удалить слайды подкаталога, но безуспешно. Я сохранил изображение (с помощью Photoshop) как совершенно новый файл, и оно копируется. Такое ощущение, что какой-то атрибут самого файла приводит к тому, что это опущено.

При каких обстоятельствах актив не будет скопирован?


person Jenna Pederson    schedule 05.03.2014    source источник
comment
вы проверяли права доступа к этому файлу изображения?   -  person Scott Simpson    schedule 06.03.2014
comment
Да, они идентичны остальным четырем изображениям в том же каталоге: 644.   -  person Jenna Pederson    schedule 06.03.2014


Ответы (3)


Я тоже столкнулся с этим. Проблема в том, что jekyll-assets удаляет повторяющиеся файлы ресурсов на основе (хэша MD5) содержимого этих файлов. Если у вас есть дубликаты изображений, в папку назначения будет скопировано только одно из них. Повторное сохранение файла из Photoshop изменило его содержимое (возможно, просто отметку времени).

Вот исправление, которое я использую, и оно работает хорошо:

require "jekyll-assets"

# Monkey-patch jekyll-assets so it doesn't drop duplicate files.
module FixSitePatch
  def self.included(base)
    base.class_eval do
      alias_method :write, :__my_write
    end
  end
  def __my_write
    static_files.push(*asset_files)
    __orig_write
  end
end
Jekyll::Site.send :include, FixSitePatch

Он заменяет обезьяний патч, который jekyll-assets, созданные с помощью другого патча для обезьян, который не удаляет дубликаты. Поместите это в _plugins/ext.rb или туда, где вы сейчас включаете jekyll-assets.

Возможно, лучшим решением для jekyll-assets было бы переписать все пути к целевым ресурсам, чтобы они указывали на одну уникальную копию файла, хотя это может нарушить внешние ссылки или вызвать проблемы с поисковыми системами, которые частично индексируют контент на основе компонентов пути.

В качестве альтернативы вы можете внести некоторые (разные) изменения во все дубликаты файлов, чтобы изменить их хэши MD5, например, изменив пиксель. (Это не очень хорошо работает в моей ситуации, когда у меня есть дополнительные сценарии, генерирующие контент, например миниатюры.)

person Michael Brundage    schedule 05.06.2014

Убедитесь, что в вашем _config.yml есть следующая информация о конфигурации:

assets:
    sources:
        - _assets/images          
        - _assets/stylesheets          
        - _assets/images/slides
person srain    schedule 06.03.2014

Мне помог совет из https://github.com/jekyll/jekyll-assets/issues/261#issuecomment-221068294 от arron-jeffery, т.е. на rm -rf .asset-cache. Очистка _site и установка

   `assets:
       cache: false` 

тоже может помочь.

Кроме того, если вы используете jekyll-assets, вы можете использовать его тег {% img %} — для него тоже есть некоторые параметры форматирования, и мне он кажется немного более надежным.

person Antek    schedule 11.04.2017