суббота, 17 марта 2012 г.

Ruby tools

gem -- пакетный менеджер руби. Аналог apt-get и тому подобному, только вот устанавливает он пакеты (модули с конкретным функционалом) в руби среду.
Обысно пакеты билдяться из файлов .gemspec, это файлы на языке YAML, на нем описано информацию о пакете, а также файлы которые нужно установить. Также можно сбилдить пакет непостредственно на языке руби, это обычно применяется в сязке с рейк.

bundle - Ruby Dependency Management. Сначала меня немного смутило, зачем их два? Первый вроде как устанавливает указанный пакет в глобальноем место. А этот устанавливает все что указано в GEMFILE, который находится в директории приложения, и устанавливаются пакеты не в гловальное место, а чаще всего под поточное приложение. Так все приложения на сервере работают со своими версиями библиотек. Вот так в RoR устанавливаеются в поддиректорию приложения:
bundle install --path vendor/bundle


понятное дело нужно находится в директории приложения где находится GEMFILE и GEMFILE.lock, а также директория vendor.
Сначала в нулевом состоянии приложения мы создаем файл GEMFILE, в котором указываем какие джемы мы хотим использовать, потому выполняем "бандл инстал", и эта утилитка создает файл GEMFILE.lock, в котором записывает точные пакеты и версии которые были установлены. Теперь этот второй файл мы в обязательном порядке добавляем в систему контроля версий, и разработчики на других машинах, загрузив приложение и выполнив "бандл инстал" получаеют точно те же верисии пакетов, что были установлены на машине "первого" разработчика(потому что бандл в первую очередь ищет GEMFILE.lock, и только в случае его отсутвия находит просто джемфайл и если там в списке не указаны версии пакетов, то устанавливает последние). Это обеспечивает совместимость между всей группой разработки.
Так лучше устанавливать на девелоперской машине:

bundle install --without production
А еще лучше так:
bundle install --without production --path vendor/bundle
Так у нас каждое RoR приложение имеет свои версии пакетов, не машая другим вываливая в глобальное место.


А так на продакшине:

bundle install --deployment

Если есть необходимость узнать куда же был установлен конткретный пакет, то:
bundle show [gemname]


rake - это инструмент для управления задачами. Аналог make, ant.

rack - это интерфейс между вебсервером поддерживающим руби и вебприложением написанным на руби. Он предоставляет простое апи, которое обворачивает в запросы/отвевы вебсервера, его главная цель упрощать. Его идея распростарнилась и на другие языки. Подобный интерфейс называется рек-компетибл, и он стал квазистрандартом для руби.
Вот пример рек-компетибл веб-приложение:


<
app = lambda do |env|
  body = "Hello, World!"
  [200, {"Content-Type" => "text/plain", "Content-Length" => body.length.to_s}, [body]]
end
 
run app

Комментариев нет:

Отправить комментарий