Подтвердить что ты не робот

Как настроить Jekyll для блога с большим каталогом изображений, чтобы избежать дублирования этого каталога на сгенерированном сайте?

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

Есть ли способ, например, удалить символическую ссылку в каталог изображений внутри каталога сайта, а затем, может быть, jekyll игнорирует ее при создании статических файлов?

Или есть ли другой способ сделать это, что имеет больше смысла?

4b9b3361

Ответ 1

Предполагая, что вы работаете на веб-сервере apache, вы можете настроить Alias-директиву для обслуживания изображений из каталога вне обычного docroot. Вам нужен доступ для редактирования конфигурации VirtualHosts или другой возможности создания директив псевдонимов (например, с помощью панели управления).

Пример того, как это будет работать, скажем, что вы храните файлы jekyll в каталоге под названием "/web/jekyll". Чтобы получить каталог изображений, выполните следующие действия:

  • Добавьте каталог "_images" вместе с вашим основным деревом jekyll. Завершив что-то вроде:

    _config.yml
    _images/
    _layouts/
    _posts/
    _site/
    index.md
    
  • Обновите конфигурацию apache, чтобы добавить директиву Alias, например:

    Alias /images /web/jekyll/_images
    
  • Перезагрузите конфигурацию apache и запустите jekyll для создания сайта.

Поскольку имя каталога изображений начинается с подчеркивания, jekyll не будет нажимать/копировать его на выходной _site во время сборки. Apache с удовольствием будет обслуживать большинство файлов из вашего каталога _site как обычно, но когда он видит что-то вроде "http://jekyll/images/test.jpg", вместо поиска файла в разделе "/web/jekyll/_site/_images/test.jpg", он будет служить ему из "/web/jekyll/_images/test.jpg".


Кстати, мне нравится немного больше разделения исходного контента и выходного контента, чем по умолчанию jekyll. Итак, я настраиваю структуру каталогов следующим образом:

/web/jekyll/html/
/web/jekyll/images/
/web/jekyll/source/
/web/jekyll/source/_config.yml
/web/jekyll/source/_layouts
/web/jekyll/source/_posts
/web/jekyll/source/index.md

С помощью следующей опции в _config.yml

destination: ../html

И настройка директивы alias apache с помощью:

Alias /images /web/jekyll/images

Jekyll запускается в директории "/web/jekyll/source", но вывод отправляется в директорию "/web/jekyll/html". Как и в первом примере, запросы на "http://jekyll/images/test.jpg" подаются с "/web/jekyll/images/test.jpg". Эта настройка действительно не влияет на перспективу работы сайта. Мне просто нравится более чистое разделение между исходными исходными файлами, полностью выпеченными выходными файлами и изображениями, которые работают через псевдоним.

Ответ 2

  • Создайте страницу для изображений.
  • Настройка структуры каталогов

    /home/git/svnpenn.github.io
    /home/git/img
    
  • Запустите Jekyll

    # We cant add the symlink until after jekyll is done. We will remove the
    # site folder and wait for it to rebuild.
    rm -r _site
    jekyll --server &
    while [ ! -f _site/index.html ]
    do
      sleep 1
    done
    ln -s ../images _site/images
    

Примечание Я использовал это, потому что думал, что это поможет опубликовать время на GitHub страницы. Это не. GitHub может занять 1-10 минут для публикации в зависимости от сервер.

Ответ 3

Правильно, первая часть команды jekyll удаляет все в каталоге назначения. Проблема с этим - символические ссылки, которые необходимо создать вручную. Итак, продолжайте и создавайте script, который делает это каждый раз.

Убедитесь, что:

исключить: [jekyll, css, img] в файле _config.yml

linux: ";" символ запускает первую, вторую, третью команды.

script: файл с именем jekyll с исполняемыми разрешениями, содержащими

 jekyll;
 ln -s /var/www/css /var/www/_site/css;
 ln -s /var/www/img /var/www/_site/img;

Наконец, запустите (./jekyll) эту программу вместо jekyll.

Дан

Ответ 4

Я знаю, что это уже ответили, но я пошел несколько иначе. Я размещал все свои изображения в общедоступном каталоге Dropbox и использовал grunt для создания манифеста изображений. Он держит мой репозиторий маленький, потому что изображения не провериться. Я подробно его некоторое время назад в блог.