Как настроить Jekyll для блога с большим каталогом изображений, чтобы избежать дублирования этого каталога на сгенерированном сайте?
Я рассматриваю Jekyll для сайта, который я собираю, это будет блог с большим количеством изображений (и других крупных медиафайлов). Достаточно легко сделать каталог для изображений, а затем привязать к ним по мере необходимости в сообщениях. Но, как я понимаю, когда сайт создается, все данные изображения будут дублироваться в сгенерированный каталог _site, который содержит статические файлы. Каждый раз, когда сайт генерируется, каталог _site освобождается и повторно заполняется статической версией сайта.
Есть ли способ, например, удалить символическую ссылку в каталог изображений внутри каталога сайта, а затем, может быть, jekyll игнорирует ее при создании статических файлов?
Или есть ли другой способ сделать это, что имеет больше смысла?
Ответы
Ответ 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 для создания манифеста изображений. Он держит мой репозиторий маленький, потому что изображения не провериться. Я подробно его некоторое время назад в блог.