RubyGems и Bundler

В Ruby все библиотеки называются Gem (да, те самые гемы, которые мы с вами устанавливали при настройке VSCode). Для того, чтобы установить библиотеку необходимо ввести в консоли: gem install название_библиотеки

RubyGems

Что на самом деле происходит в момент, когда вы устанавливаете библиотеку ?

Программа gem, которая идет вместе с самим языком при установке, пытается найти библиотеку по названию в gem-репозитории RubyGems. Если библиотека найдена, то программа скачивает ее к вам на компьютер. Например при использовании RVM на MacOS все библиотеки попадают по пути /Users/$USER/.rvm/gems/default/gems.

В самой директории можно найти различные подкаталоги название которых повторяет название библиотеки. Кроме того можно увидеть какие-то цифры в названии. Эти цифры - версия библиотеки.

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

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

Если перейти в каталог любой библиотеки, то мы можем обнаружить в ней директорию lib, внутри которой будут находиться обычные .rb файлы.

Кроме директории с самим исходным кодом, в некоторых библиотеках можно обнаружить еще и директорию bin. Если такая директория присутсвует, значит наша библиотека является еще и полноценной программой, которой мы можем пользоваться из консоли. Наша программа gem при установке проверяет наличие этой директории, и если она есть до добавляет файлы оттуда в глобальное пространство, что делает их видимыми из любого каталога в терминале. Примечательно то, что эти самые файлы это самые обычные файлы, содержащие ruby код, внутр икоторых можно найти такую строчку как #!/usr/bin/env ruby, означающая, что именно программа Ruby должна запускать наш файл.

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

Сами библиотеки могут распространяться по 2 моделям:

  • Open source - открытый исходный код, в 99% случаев бесплатное использование

  • Commercial - исходный код закрытый, пренадлет какой-то компании, использование в основном платное, возможно есть бесплатная версия с ограниченным

На самом сайте RubyGems на странице RubyGems вы можете обнаружить следующую полезную информацию

  • RDoc Документация кода библиотеки

  • Страница библиотеки на GitHub

  • История версий

  • Автор библиотеки

  • прочая информация

Ранее вы уже сталкивались с использованием библиотек в коде, например когда работали с json или csv. Только данный библиотеки являются встроенными и идут в стандартной поставке вместе с языком Ruby. Но на всякий случай повторим, для использования библиотеки в своем .rb файле вам необходимо добавить require "название_библиотеки" в начало вашего файла (но можно и не в начале, библиотеку можно использовать со следущей строки после привязки).

Bundler

У каждого проекта могут использоваться абсолютно разные библиотеки и чтобы каждый раз не устанавливать их вручную, создали инструмент Bunder.

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

  • установить библиотеку с помощью gem install bundler

  • Вызвать bundle init в консоли внутри вашего проекта

После инициализации bunder-проекта, в вашей директории появится файл Gemfile, содержащий информацию про все гемы от которых зависит ваш проект:

# frozen_string_literal: true

source "https://rubygems.org"

# Да-да это самый обычный ruby код
# установка гемов происходит с помощью вызова gem метода и передачи в него названия библиотеки
# gem "rails"

Для того, чтобы установить все гемы, перечисленные в файле Gemfile необходимо вызвать bundle install. На самом деле bundler имеет куда обширнее функционал, но на данном этапе нам этой информации хватит, чтобы начать с ним работать. Более подробно можете ознакомиться с его функционалом из дополнительного метаериал.

Задание

Создайте bunder-проект внутри корневого раздела вашего курса

Дополнительный материал

Last updated