Андрей Васильев
2020
Наборы ПО Ruby носят имя gem
(джем), драгоценный камень
gem
Каталог джемов является публичным, и разместить джемы там могут любые разработчики
gem
Для поиска по имени в каталоге используйте команду search
Удобно использовать также и сайт https://rubygems.org
Для установки джема по имени используйте команду install
По умолчанию установка включает в себя шаг генерации документации, для его отключения и ускорения установки используйте опцию --no-doc
gem
Команда list
показывает список установленных джемов
Команда uninstall
удаляет указанные джемы
При установке джемов ставятся также и их зависимости
Со временем количество неиспользуемых джемов будет расти
Когда вы ставите джем, то он устанавливается в специальную директорию, которая привязана к Ruby-интерпретатору, а не к конкретному проекту. Эта директория определяется в переменной окружения GEM_HOME
, для её просмотра в UNIX-системах воспользуйтесь $ echo $GEM_HOME
, $ echo %GEM_HOME%
в Windows
gem
можно настроить на использование нескольких директорий для хранения джемов:
Для просмотра текущей конфигурации и выяснения местоположения этих директорий используйте команду gem env
и посмотрите на список GEM PATHS
.
Джемы устанавливаются в каталог конкретной версии интерпретатора, не разделяются между интерпретаторами
Есть специальные инструменты, которые позволяют создать отдельные наборы джемов на уровне установок
chruby
— изменить текущий интерпретатор Rubygem_home
— изменить путь к набору джемовrbenv
— изменить интерпретатор Rubyrvm
— решить все задачи управления наборами джемов, установки и изменения интерпретаторовbundler
— программное решение для создания наборов джемов
Если во время установки джема вы поставили документацию, тогда её можно посмотреть с помощью встроенных средств
Инструмент ri
позволяет просмотреть документацию
Вы можете запустить встроенный сервер для просмотра документации
Большинство джемов предоставляют отдельные сайты с детальной документацией, ссылки на них можно найти на сайте rubygems.org. Это является рекомендованным на настоящий момент способом
На странице описания джема есть важные ссылки
bin
— исполняемые файлы джемаlib
— библиотечные файлы джемаtest
— каталог с автоматическими тестамиGemfile
— список зависимостей джемаRakefile
— конфигурация автоматических задачREADME.md
— краткое описание джема для людей.gemspec
— спецификация джемаsimple-gem
1.0.5
Для эффективной совместной работы команда должна придти к общему пониманию по ряду ключевых вопросов. Часть из них изложена ниже.
Далее мы рассмотрим инструменты, которые дают ответ на последние два вопроса и являются стандартными инструментами в Ruby-сообществе
Джем bundler является стандартом де-факто в Ruby сообществе для управления зависимостями разрабатываемого проекта
Документация по проекту доступна на https://bundler.io
Для начала использования bundler его необходимо установить
Набор необходимых джемов в Bundler указывается в Gemfile
source
указывает источник для получения джем-файлов
rubygems.org
— источник публичных джемовgem
указывает джем, который надо установить
Процесс установки зависимостей с Bundler очень прост:
$ gem install bundler
$ bundle init
$ bundle install
После выполнения установки был создан Gemfile.lock
, его тоже необходимо переносить на другие компьютеры — там указаны конкретные версии джемов, а не пожелания
Если вы перенесли все необходимые для приложения и bundler файлы, то на других компьютерах необходимо:
Gemfile
и Gemfile.lock
)Установить джем bundler, если он не установлен
$ gem install bundler
Установить все зависимости с указанными версиями
$ bundle install
Процесс добавления достаточно прост:
Gemfile
$ bundle install
для установкиadd
Если у вас уже есть Gemfile, тогда можно воспользоваться командой $ bundle add
для установки джемов
Команда добавит строку в Gemfile
и установит джем
Bundler предоставляет обширную документацию по встроенным командам, которую можно прочитать локально
Для отображения списка команд выполните
Для получения помощи по конкретной команде выполните $ bundle help <command>
, вместо <command>
надо написать название команды: $ bundle help add
$ bundle console
— запустить IRB-сессию с установленными джемами$ bundle clean
— удалить неиспользуемые версии джемов, что скорее всего сломает другие проекты$ bundle config
— настроить BundleОбычно в Gemfile
указаны пожелания, а в Gemfile.lock
конкретные версии приложений. Бывает необходимо обновить версию джема из-за выхода новой версии
Для решения этой задачи обновления зафиксированных версий
Gemfile
, укажите нужные версии$ bundle update chunky_png
. Команда обновит версию джема chunky_png
в Gemfile.lock
и установит егоПо умолчанию Bundler поставит самые последние версии, которые удовлетворяют вашим ограничениям. Обязательно проверяйте работоспособность вашего ПО после обновления версий. Наилучший способ — это запуск автоматизированных тестов
Команда $ bundle exec <command>
позволяет запустить приложение в контексте установленного набора джемов
Для запуска приложения в рамках набора используйте
В таком случае в приложении application.rb
можно будет подключить только джемы из набора Bundler
Также можно запускать исполняемые файлы джемов
Если Вы используете Bundler, то при создании приложения удобно его подключать прямо из Ruby-кода, чтобы сэкономить на длине команды для запуска приложения
Полную информацию по данной функции можно прочитать в официальной документации.
Для подключения всех зависимостей достаточно добавить в главный файл следующее
После этого следующие варианты запуска приложения будут равнозначны
Ruby является очень выразительным языком, позволяющим решить задачу многими способами. За время жизни языка некоторые из способов были признаны сложными для восприятия и не рекомендуются к использованию
Для поддержания хорошего стиля кодирования на Ruby был разработан Ruby Style Guide, который также был переведён на русский язык
Данное руководство постоянно дорабатывается, так как практики по использованию языка постоянно изменяются:
Джем Rubocop проверяет исходный код на соответствие Ruby Style Guide, а также внутренним требованиям команды
Установку джема в Bunler рекомендуется выполнять так:
Для проверки всех файлов в текущем каталоге достаточно вызывать исполняемый файл джема:
Для проверки конкретных файлов и директорий:
Поначалу прочитать руководство, воспринять его и следовать ему бывает сложно. Для решения простейших проблем джем Rubocop предоставляет режим автоматического исправления:
Важно! автоматическое исправление может привести к поломке кода. Если Bundler нарушил работу вашего приложения, то это ваша обязанность и удовлетворить его требованиям, и вернуть работоспособность коду
Для ускорения проверки, её можно запустить в несколько потоков с помощью ключа -p
, --parallel
:
Данный инструмент можно достаточно гибко настраивать, чтобы он смог удовлетворить конкретным требованиям команды. Про его настройку можно прочитать в официальной документации.
Настройка производится путём редактирования файла .rubocop.yml
, который обычно находится в корне проекта. Ниже представлен конфигурационный файл, который будем использовать в рамках курса
Rubocop поддерживает отключение проверок для конкретного участка кода. Для этого необходимо добавить соответствующие комментарии:
В рамках учебного процесса будем использовать настройки из предыдущего экрана. Вам запрещается отключать проверки или редактировать файл .rubocop.yml
.
Если вы считаете, что исправления кода согласно требованиям Rubocop делают его хуже, тогда надо для каждого такого случая подготовить разъяснение. Оно должно включать в себя исправленный код и сравнительный анализ вашего текущего кода и исправленного.