Статьи

Плагины Jekyll на GitHub

Джекил

Если вы используете Ruby, вы, скорее всего, слышали о GitHub , удивительном и любимом репозитории DVC. Вы также, наверное, слышали о Jekyll , генераторе статических сайтов с поддержкой блогов. Что вы, возможно, не знаете, так это то, что GitHub позволяет вам бесплатно размещать свой сайт Jekyll на их сервисах GitHub Pages ! Как и любой другой бесплатный сервис, тут есть подвох. Это не реклама, ограничения пропускной способности или скрытые платежи, а использование плагинов Jekyll.

Если вы не знакомы с Jekyll или GitHubPages, ознакомьтесь с Руководством по быстрому запуску и его введением в развертывание сайтов на страницах GitHub .

Jekyll по умолчанию делает более чем достаточно, чтобы позволить вам взяться за дело. Вы можете писать свои посты в уценке, использовать простой движок шаблонов Liquid, чтобы ваш сайт выглядел красиво, а затем генерировать статические страницы с помощью jekyll build и получать готовые к развертыванию HTML-файлы и ресурсы. Поскольку это статические HTML-файлы (и, возможно, некоторые JavaScript), вы можете разместить их практически где угодно

  1. Персональный сервер
  2. Общий хостинг
  3. Общедоступная папка Dropbox
  4. GitHub Pages (очевидный правильный выбор)

1 и 2 требуют времени и денег для поддержки, и попытка разместить сайт на Dropbox, вероятно, не является хорошей идеей для чего-то большего, чем тестирование. Служба GitHub Pages (предоставляемая пользователям, организациям и проектам для размещения сайтов о себе, своих организациях и проектах) работает на Jekyll; инструмент, который они построили и поддерживают, потому что они все кормят собак.

Это где плагины входят (или, скорее, нет). С GitHub Pages довольно легко начать работать, даже если вы новичок в Ruby и Git. Но то, что они не говорят вам, это то, что, когда вы git push Jekyll в вашем репозитории user / gh-pages на Github, и он создает каталог _site для публичного использования, он не запускает никаких плагинов Jekyll, которые не являются частью официального репо.

Это потому, что когда Github создает ваши страницы, он делает это с помощью jekyll build --safe . Параметр --safe предотвращает выполнение произвольного кода во время сборки, поскольку GitHub явно не хочет, чтобы вы выполняли произвольный код на их серверах.

Интересный факт: механизм шаблонов жидкостей используется в Jekyll именно потому, что он безопасен и не допускает произвольного внедрения кода. Это делает его безопасно «редактируемым пользователем».

Есть много замечательных плагинов Jekyll, таких как архивы и генераторы rss, которые добавляют весьма желательную функциональность. Однако, поскольку они не являются базовыми плагинами Jekyll, они не будут работать на страницах GitHub. Конечно, вы все еще захотите эту функциональность на своем сайте, так как мы можем обойти этот (вполне законный) страх перед выполнением произвольного кода? Есть несколько разных способов, от простого до чрезвычайно автоматизированного (и сложного). Хорошая новость в том, что простой способ будет работать для всех.

GitHub Pages размещает ваш сайт, но технически он не должен быть сгенерирован Jekyll. Это означает, что вы можете создать свой сайт локально, а затем отправить статические файлы на GitHub. Github не найдет ничего, что можно скомпилировать с помощью jekyll build поэтому вы получите репо своего сайта вместо репо ваших файлов Jekyll. Вы можете убедиться, что GitHub не пытается создать ваш сайт, включив в .nojekyll файл .nojekyll .

Простой Путь

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

  1. Переименуйте каталог с вашим сайтом Jekyll в compiled_site
  2. Создайте новый каталог (вне каталога compiled_site ) и назовите его jekyll_site
  3. Скопируйте все содержимое compiled_site в jekyll_site
  4. Запустите jekyll build в вашем новом jekyll_site
  5. В вашем каталоге compiled_site запустите git rm -r чтобы удалить все файлы
  6. Скопируйте все содержимое jekyll_site/_site в compiled_site
  7. Создайте файл .nojekyll в compiled_site
  8. Запустите git add --all :/ в compiled_site чтобы добавить все статические файлы в репозиторий git и удалить старые
  9. Запустите git commit -m "Built site locally"
  10. Запустите git push для обновления GitHub

Если вам нужны плагины, работающие на вашем сайте сейчас , нет более быстрого способа разместить контент на страницах GitHub, чем этот. К сожалению, каждый раз, когда вы пишете новое сообщение, изменяете свою тему или вносите какие-либо изменения, вам нужно будет вручную скопировать файлы, встроенные в ваш каталог _site в настоящий каталог GitHub.

Менее простой, более удивительный путь

Ручное копирование файлов? Девиз Jekyll — «блог как хакер», и это ручное управление файлами не выглядит как хакерский. К счастью, у нас есть rake . Мы можем сделать простую грабли для автоматизации процесса, описанного выше. Если ваш блог Jekyll еще не использует Rakefile , создайте его и поместите в созданный ранее каталог jekyll_site . Добавьте следующее в этот Rakefile:

 GH_PAGES_DIR = "compiled_site" desc "Build Jekyll site and copy files" task :build do system "jekyll build" system "rm -r ../#{GH_PAGES_DIR}/*" unless Dir['../#{GH_PAGES_DIR}/*'].empty? system "cp -r _site/* ../#{GH_PAGES_DIR}/" end 

Перед запуском вашего Rakefile обязательно исключите его из сборки в _site/ , добавив строку исключения в ваш _config.yml . Для строки исключения требуется массив, даже если существует только один файл.

 exclude: [Rakefile] 

Теперь вместо использования jekyll build для подготовки своего сайта вы можете использовать rake build . Этот Rakefile будет

  • запустить jekyll build для вас
  • очистите папку назначения, если в ней есть содержимое (в случае, если вы удалили файлы / сообщения / ресурсы с момента последней сборки сайта)
  • скопируйте содержимое недавно созданного jekyll_site/_site каталог git repo compiled_site

Теперь вы можете cd в compiled_site и запустить

 git add --all git commit -m "Updated my site!" git push origin master 

Вы можете расширить свой Rakefile для обработки команд git add , git commit и git push , если вы хотите стать еще более изящными. В конце концов я расширил свой Rakefile чтобы управлять всем этим для меня с помощью веток git вместо нескольких каталогов (публикация на другой день!). Однако с этой настройкой вы можете использовать все необходимые плагины Jekyll, создавать свой сайт локально и по-прежнему размещать хост Ваш сайт на фантастических (и бесплатных!) страницах GitHub легко.

Вы ведете блог как хакер? Используете ли вы страницы GitHub для размещения этих файлов Jekyll? Дайте мне знать в комментариях, какую автоматизацию вы встроите в свой процесс, и какие плагины Jekyll вы сможете использовать сейчас.