Статьи

Ноль в Джекилла за 20 минут

Почему Джекилл?

Как Rubyist вы часто будете видеть пример кода, который начинается как rails new blog и это заманчиво. Многие из нас прошли через эту кроличью нору, потому что, как программист, он чувствует себя правильным начать с нуля и иметь контроль над каждым небольшим аспектом. Это твой ребенок, и ты хочешь, чтобы он был идеальным.

Это не важно!

За редким исключением, написание собственного веб-приложения для блога не только излишне, но и фактически снижает ваши возможности по созданию контента. В конце концов, вы создаете блог, потому что считаете, что вам есть что сказать, так что скажите это. Это то, что делает Jekyll: это не мешает вам, предоставляя вам все удобства пользовательского приложения, не тратя все свое время на разработку.

Недавно я переключился с Rails на Jekyll в своем блоге. Это был полезный опыт, и я думаю, что он подойдет вам. Сначала поговорим о том, что такое Джекилл.

Jekyll — это генератор статических веб-сайтов с поддержкой блогов.

По сути, это движок, который проверяет вашу уценку и выплевывает кучу HTML-страниц в каталог _site чтобы вы могли обслуживать его с вашего любимого веб-сервера (Nginx / Apache). На самом деле есть еще много чего, но как только вы разберетесь с базовой структурой, все, что вам нужно сделать, это написать контент, и он выведет симпатичный веб-сайт.

Он использует шаблонизатор Liquid [1] для обеспечения более семантической организации на вашем сайте, а также расширяемые вспомогательные методы. Он также поддерживает несколько конвертеров уценки, так что вы можете писать в любом вкусе, который вы предпочитаете (например, Markdown, Textile, HTML и др.)

Теперь, когда вы немного знакомы с Джекиллом, мы можем погрузиться в создание блога.

основы

Структура сайта Jekyll довольно гибкая с несколькими обязательными элементами. В вики Jekyll есть несколько замечательных сайтов, которые дают некоторое представление о том, что представляет собой сайт Jekyll. Тем не менее, мы будем использовать сайт @ mojombo в качестве ссылки, с некоторыми изменениями.

Если вы собираетесь следовать, запустите это:

$ mkdir your_blog
$ cd ./your_blog
$ mkdir _layouts _plugins _includes _posts css javascripts images
$ touch index.html _config.yml _layouts/default.html

view raw
gistfile1.txt
hosted with ❤ by GitHub

После того, как вы это сделаете, у вас должно появиться дерево, которое выглядит следующим образом (минус посты).

├── README.md
├── _config.yml
├── _layouts
└── default.html
├── _plugins
├── _includes
├── _posts
│   ├── 2012-03-27-your_first_post_in_markdown.md
│   └── 2012-03-27-your_second_post_in_textile.textile
├── css
│   └── screen.css
├── javascripts
├── images
└── index.html

view raw
gistfile1.txt
hosted with ❤ by GitHub

В этом дереве есть все, что вам нужно, чтобы начать создавать контент. Когда у вас будет готов первый пост (умное имя, верно?), Вы просто наберете:

# the —auto flag makes each request regenerate any changed files
$ jekyll —server —auto

view raw
gistfile1.txt
hosted with ❤ by GitHub

Затем перейдите по http://localhost:4000/2012/03/27/your-first-post-in-markdown.html и вы увидите, что ваш текст волшебным образом отображается в HTML. Перед этим, однако, вы должны убедиться, что каждый пост, который вы хотите проанализировать, содержит содержание YAML.

layout: default
title: Your First Post In Markdown

view raw
gistfile1.txt
hosted with ❤ by GitHub

Внутри вашего layout/default.html просто создайте HTML-макет вашей страницы по умолчанию и добавьте жидкостный тег для своего контента, например, {{ content }} .

Вот и все. Теперь у вас есть блог Jekyll. Мы вернемся к публикации через минуту.

Расширяя Джекилла с Руби

Во-первых, давайте прояснимся … Руби потрясающая! Jekyll использует возможности Ruby, позволяя вам расширяться, просто перетаскивая любой файл _plugins каталог _plugins [3] . Например, когда я преобразовал свой блог из Ruby в Jekyll, у меня была схема URL, в которой расширение .html отсутствовало во всех URL. Поскольку я не хотел, чтобы какие-либо существующие URL ломались, мне нужно было создать жидкий тег, который позволил бы мне убрать его. Это было так просто:

module Jekyll
module RemoveExtension
def remove_extension(input)
input.gsub(/\.\w+\Z/, »)
end
end
end
Liquid::Template.register_filter(Jekyll::RemoveExtension)

view raw
gistfile1.txt
hosted with ❤ by GitHub

Я просто открываю Jekyll и добавляю в него свой собственный модуль. Тогда register_filter с системой шаблонов Liquid, и вы отправляетесь в гонки. Чтобы использовать это просто поместите {{ page_url | remove_extension }} {{ page_url | remove_extension }} везде, где вам нужен {{ page_url | remove_extension }} URL. Конечно, Jekyll по-прежнему будет генерировать файлы с расширениями .html , поэтому обслуживание этих URL-адресов — это то, что вам нужно будет настроить на вашем веб-сервере.

Я не думаю, что мне нужно говорить вам, насколько это полезно. Почти все, что вам нужно сделать, вы можете построить сами. Наиболее распространенными причинами создания плагина являются генерация вашего HTML на основе ваших собственных правил (Генераторы), создание тега Liquid для изменения / модификации вывода (Теги) и фильтров, как в примере выше. Все эти вещи так же просто, как указано выше.

Если вы не такой уж большой программист, ничего страшного. В вики доступно несколько плагинов, и их установка должна быть такой же простой, как и установка их в каталог _plugins .

развертывание

Хорошо, вся работа, которую вы проделали до сих пор, не будет иметь большого значения, если вы не можете предоставить свои файлы своей аудитории. Не бойтесь, есть несколько способов донести ваш блог Jekyll до публики. Поскольку Jekyll генерирует каталог _site со всеми связанными ресурсами / HTML, конфигурация сервера для Jekyll невелика. Большинство настроек продиктовано тем, какой веб-сервер вы используете. Например, в Nginx конфигурация вашего блога будет выглядеть так:

server {
listen 80;
root /path/to/blog;
location /blog {
root /var/www/blog;
}
}

view raw
gistfile1.txt
hosted with ❤ by GitHub

Затем просто rsync ваш _site к /var/www/blog и все готово.

Однако, если вы скромный хакер с ограниченным бюджетом и не хотите размещать собственный сайт, вы можете использовать Heroku. Давайте сделаем это.

Героку и Джекилл Ситтин на дереве

Лучшая техника — это использовать rack-jekyll для создания стоечного приложения на вашем сайте Jekyll. Для его работы не требуется слишком много настроек, и после его завершения вы можете использовать Git в качестве рабочего процесса написания и развертывания.

Первое, что нужно, это файл рэка:

require «rack/jekyll»
run Rack::Jekyll.new

view raw
gistfile1.rb
hosted with ❤ by GitHub

Далее идет Gemfile, который должен выглядеть примерно так: Обязательно связывайте это и проверьте ваш Gemfile.lock для развертывания.

source :rubygems
gem ‘rack-jekyll’
gem ‘thin’

view raw
gistfile1.txt
hosted with ❤ by GitHub

После того, как вы это сделаете, вы должны начать и зафиксировать настройку вашего репозитория git.

$ git init && git add . && git commit -m «Initial Commit»

view raw
gistfile1.txt
hosted with ❤ by GitHub

Поскольку мы хотим, чтобы Heroku обслуживал статические файлы, вам нужно добавить каталог _site в свой репозиторий git. Я обнаружил, что регистрация многих файлов выглядит немного неприлично, поэтому я создал отдельную ветвь для развертываний, чтобы поддерживать чистоту главной ветки (ручное объединение перед развертыванием).

git branch deploy
git checkout deploy

view raw
gistfile1.txt
hosted with ❤ by GitHub

Теперь просто добавьте, совершите, а затем вызовите heroku create --stack cedar . Как только это закончится, вам нужно будет снова сгенерировать ваши файлы (просто чтобы убедиться, что они актуальны) и нажать на heroku.

$ jekyll
$ git push heroku deploy:master

view raw
gistfile1.txt
hosted with ❤ by GitHub

Теперь у вас есть блог на Heroku!

Выводы

После преобразования моего блога в Jekyll он стал удивительно гибким решением многих проблем, связанных с созданием и управлением блогом. Существует огромное количество информации о Джекилле, и многие люди, которые ее используют, невероятно полезны и готовы помочь. При выборе новой платформы только эти два факта заслуживают серьезного рассмотрения Джекилла. Однако то, что я нашел, было гораздо больше: решение, которое было простым, элегантным и мощным.

Создание контента никогда не было проще.

<soapbox>

И это суть дела …

Если вы хотите создать blerg в Rails или Sinatra, то обязательно сделайте это. Я думаю (поцарапайте это, я знаю ), вы найдете это полезным опытом обучения. Я обнаружил, что вещи, которые делают Rails и Sinatra удивительными средами, — это не только их способность обслуживать статические файлы, но и способность создавать динамические приложения. Для блога:

Не тратьте свое время на создание широких [функций], вместо этого создавайте глубокие [контент].

Блог должен быть простым и гибким. Джекилл помогает.

</soapbox>

Спасибо за прочтение. У Джекилла есть удивительная вики с тоннами информации; не забудьте проверить там для дополнительных деталей, не содержащихся в этой статье.