В этой заметке мы кратко рассмотрим процесс установки Octopress в Mac OS X для генерации статического веб-сайта.

А зачем нам вообще Octopress?

Практически все мои начинания в части личных веб-проектов носят чисто утилитарный характер. История с Octopress - очередное тому подтверждение. Началось все с того, что мне, как админу трех блогов на Wordpress, надоело тратить свои кровные на поддержание прожорливого Scale-сервера от Clodo в том объеме расходов, которые там образовались за последний год с хвостиком. Иными словами, блоги то ли в силу моих кривых рук, то ли в силу апдейтов, стали потреблять слишком много ресурсов выделенного сервера. За что и поплатились: один из них в настоящее время заменен примитивной статикой, собранной за два вечера на Bootstrap, второй в настоящее время завершает миграцию в статику на основе Octopress, о которой сегодня и пойдет речь.

Что же такое Octopress? Если кратко, это набор скриптов на Ruby, который позволяет из заранее подготовленных markdown-файлов генерировать статический блог, то есть блог, состоящий из статических html-страниц. Всякому веб-программисту в возрасте от 10 лет и выше известно, что статический сайт из html-страниц требует гораздо меньше ресурсов сервера, чем аналогичный, построенный на php, да еще и, не приведи Господи, на какой-нибудь разухабистой CMS, вроде того же Wordpress. Поэтому идея замены CMS на сервере набором небольших статических html-страничек не должна вызывать отторжения у больше части прогрессивного человечества.

Создатели Octopress не случайно называют его блоггинговым движком для хакеров - для того, чтобы все успешно установить и настроить необходима большая голова. Особенно веселые приключения ожидают тех, кто разрабатывает приложения в Xcode версий выше 4.1, но обо всем по-порядку.

Ниже я опишу свои приключения по установке Octopress на Lion 10.7.4 + Xcode 4.3.1. Официальную инструкцию по установке можно найти тут, я приведу модифицированную ее версию, из которой будут понятны некоторые подводные камни.

Перед тем, как мы начнем, я хочу кратко прояснить, как вообще устроена работа с Octopress, потому что официальное описание несколько туманно по поводу концептуальных вопросов. Мы ставим на локальную машину систему контроля версий Ruby, далее ставим Ruby нужной версии (да-да, это 1.9.2), далее забираем с гитхаба Octopress и ставим его на локальную машину. После этого, делаем необходимые настройки в Octopress, создаем несколько постов/страниц, собираем их с помощью Octopress в набор статических страниц, а далее заливаем этот набор страниц на удаленный сервер, после чего имеем профит.

Установка git и Ruby

Прежде всего, установите git, если у Вас его еще нет.

Далее установите одну из альтернативных систем контроля версий Ruby - RVM или rbenv. Эти системы являются альтернативными, установить необходимо только одну из них. Исторически RVM появилась раньше, чем rbenv, поэтому она является более разухабистой. rbenv же, напротив, достаточно минималистична. Основное практическое отличие RVM от rbenv заключается в том, что она позволяет управлять гемсетами - устанавливать и удалять их. В случае rbenv для работы с гемсетами можно использовать bundler. Для тех, кто интересуется более подробным сравнением RVM и rbenv, рекомендую ознакомиться с этой заметкой с Хабра. Вот тут неплохо описан процесс установки rbenv. А вот эта заметка утверждает, что все-таки удобнее пользоваться RVM. Я ни в коем случае не хочу способствовать разжиганию войны между сторонниками указанных систем контроля версий, однако, в моем конкретном случае мне было удобнее пользоваться RVM, потому что для него существует симпатичный официальный GUI - JewelryBox, который я и установил. Иными словами, для выполнения этого пункта владельцам Mac OS достаточно установить JewelryBox.

Для тех, кто выберет установку rbenv, крайне рекомендую поставить сразу и ruby-build, это позволит существенно упростить установку Ruby до одной команды install.

После установки RVM необходимо установить Ruby 1.9.2. Для этого пользователям RVM предлагается использовать команду:

rvm install 1.9.2 && rvm use 1.9.2

а пользователям rbenv предлагается использовать команду:

rbenv install 1.9.2-p290

Основные приключения начались у меня именно на этом пункте. Дело в том, что, как я упоминал ранее, для работы Octopress необходима именно Ruby 1.9.2. На номер p290 можно не обращать особое внимание, это порядковый номер последнего патча в рамках основной версии 1.9.2. Для установки достаточно набирать в консоли 1.9.2. В случае использования JewelryBox достаточно установить Ruby 1.9.2 через это приложение.

Однако, в моем случае попытка установить версию 1.9.2 потерпела полный провал. При попытке установки через JewelryBox приложение вело себя некорректно и не показывало ровным счетом ничего вразумительного - после выбора нужной версии Ruby ничего не происходило. Попытка применения указанной консольной команды привела к более интересным результатам. Мне было сказано, что у меня установлен Xcode версии 4.3 (на самом деле, у меня установлен Xcode 4.3.1) и с ним работать будет только Ruby 1.9.3-p125 и выше. А если мне будет угодно работать с более ранними версиями Ruby, то мне настоятельно рекомендуется удалить Xcode 4.3 и поставить Xcode 4.1. Поскольку моя работа заключается в том, чтобы разрабатывать приложения для iOS, откат к более ранней версии представился мне крайне нежелательным вариантом.

После чтения интернетов, было обнаружено, что столь дерзкий отказ в установке Ruby 1.9.2 обусловлен тем, что в версиях Xcode от 4.3 и выше Apple благополучно убрало компилятор gcc, заменив его на llvm. Я при обновлении версии Xcode имею дурную привычку сносить старую версию и ставить новую начисто, поэтому не исключаю, что при обновлении у других пользователей gcc вполне может и уцелеть.

Поскольку перспектива руками делать весь блог на Bootstrap меня не прельщала, было решено искать пути вернуть gcc на машину. Интернеты не подвели и в этот раз и уже через несколько минут стало понятно, что gcc можно установить из Homebrew. Для тех, кто не в курсе, Homebrew - это такой менеджер пакетов, позволяющий ставить UNIX tools, которые Apple по тем или иным причинам не поставляет в Mac OS. Установка Homebrew представляет собой выполнение команды:

/usr/bin/ruby -e "$(/usr/bin/curl -fsSL https://raw.github.com/mxcl/homebrew/master/Library/Contributions/install_homebrew.rb)"

Далее рекомендуют выполнить проверку установки Homebrew:

brew doctor

Далее рекомендуют обновить Homebrew:

brew update

После этого, можно установить столь желанный нами gcc:

brew install apple-gcc42

Далее рекомендуют установить Ruby 1.8.7, хотя я не уверен, что это необходимо.

rvm install 1.8.7

После этого, можно установить заветную Ruby 1.9.2 и сделать ее используемой по умолчанию:

rvm install 1.9.2
rvm use 1.9.2

Установка Octopress

Покончив с установкой Ruby можно заняться установкой самого Octopress. Эта часть не вызвала у меня каких-либо проблем.

Прежде всего, получаем Octopress с GitHub’а:

git clone git://github.com/imathis/octopress.git octopress

Далее переходим в директорию octopress. При использовании RVM пользователя спросят, доверяет ли он .rvmrc-файлу, необходимо ответить yes.

cd octopress 

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

ruby --version

Далее необходимо установить dependencies:

gem install bundler
rbenv rehash    # необходимо при использовании rbenv
bundle install

Далее устанавливаем дефолтную тему Octopress:

rake install

На этом приключения по установке заканчиваются и начинаются совсем другие приключения по настройке Octopress и началу ведения блога.