gem -- пакетный менеджер руби. Аналог apt-get и тому подобному, только вот устанавливает он пакеты (модули с конкретным функционалом) в руби среду.
Обысно пакеты билдяться из файлов .gemspec, это файлы на языке YAML, на нем описано информацию о пакете, а также файлы которые нужно установить. Также можно сбилдить пакет непостредственно на языке руби, это обычно применяется в сязке с рейк.
bundle - Ruby Dependency Management. Сначала меня немного смутило, зачем их два? Первый вроде как устанавливает указанный пакет в глобальноем место. А этот устанавливает все что указано в GEMFILE, который находится в директории приложения, и устанавливаются пакеты не в гловальное место, а чаще всего под поточное приложение. Так все приложения на сервере работают со своими версиями библиотек. Вот так в RoR устанавливаеются в поддиректорию приложения:
понятное дело нужно находится в директории приложения где находится GEMFILE и GEMFILE.lock, а также директория vendor.
Сначала в нулевом состоянии приложения мы создаем файл GEMFILE, в котором указываем какие джемы мы хотим использовать, потому выполняем "бандл инстал", и эта утилитка создает файл GEMFILE.lock, в котором записывает точные пакеты и версии которые были установлены. Теперь этот второй файл мы в обязательном порядке добавляем в систему контроля версий, и разработчики на других машинах, загрузив приложение и выполнив "бандл инстал" получаеют точно те же верисии пакетов, что были установлены на машине "первого" разработчика(потому что бандл в первую очередь ищет GEMFILE.lock, и только в случае его отсутвия находит просто джемфайл и если там в списке не указаны версии пакетов, то устанавливает последние). Это обеспечивает совместимость между всей группой разработки.
Так лучше устанавливать на девелоперской машине:
Обысно пакеты билдяться из файлов .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
Комментариев нет:
Отправить комментарий