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
, содержащий информацию про все гемы от которых зависит ваш проект:
Для того, чтобы установить все гемы, перечисленные в файле Gemfile
необходимо вызвать bundle install
. На самом деле bundler имеет куда обширнее функционал, но на данном этапе нам этой информации хватит, чтобы начать с ним работать. Более подробно можете ознакомиться с его функционалом из дополнительного метаериал.
Задание
Создайте bunder-проект внутри корневого раздела вашего курса
Дополнительный материал
Last updated