RubyGems
RubyGems — менеджер пакетов для языка программирования Ruby, предоставляющий стандартный формат для распространения программ и библиотек на Ruby (в самодостаточном формате, называемом «gem»), инструмент для управления установкой gems, а также сервер для их распространения. Создан Чадом Фаулером, Джимом Вейриком, Дэвидом Аланом Блэком, Полом Браннаном и Ричардом Килмером в 2004 году[2].
Интерфейс RubyGems реализован в виде инструмента командной строки gem, с помощью которого можно устанавливать и управлять библиотеками (gems)[3]. RubyGems интегрируется с загрузчиком времени выполнения Ruby для поиска и загрузки установленных gems из стандартных директорий библиотек. Хотя можно использовать частный репозиторий RubyGems, для управления пакетами обычно применяется публичный репозиторий.
Публичный репозиторий помогает пользователям находить gems, разрешать их зависимости и устанавливать их. RubyGems входит в стандартный пакет Ruby начиная с версии 1.9[4].
Что важно знать
| RubyGems | |
|---|---|
| Тип | менеджер пакетов |
| Авторы | Чад Фаулер, Джим Вейрик, Дэвид Алан Блэк, Пол Браннан, Ричард Килмер |
| Разработчики | Чад Фаулер, Джим Вейрик, Дэвид Алан Блэк, Пол Браннан, Ричард Килмер |
| Написана на | Ruby |
| Операционная система | мультиплатформенный |
| Языки интерфейса | английский |
| Первый выпуск | 14 марта 2004 |
| Последняя версия | 4.0.9 (25 марта 2026[1]) |
| Репозиторий | github.com/rubygems/ruby… |
| Лицензия | Ruby License |
| Сайт | rubygems.org |
История
Разработка RubyGems началась в ноябре 2003 года; публичный релиз состоялся 14 марта 2004 года, в день числа Пи 2004 года[5].
Авторами RubyGems выступили Чад Фаулер, Джим Вейрик, Дэвид Алан Блэк, Пол Браннан и Ричард Килмер в ходе RubyConf 2004[2].
В 2010 году основной публичный репозиторий gems был перенесён с gems.rubyforge.org на rubygems.org, который используется по сей день. Кроме того, разработка RubyGems была переведена на GitHub в том же году. Хотя RubyGems существовал начиная с Ruby 1.8, он не входил в стандартное дистрибутивное поставку Ruby до версии 1.9.
С 2004 по 2010 годы состоялось 38 выпусков RubyGems[5].
Ранее совместимость между версиями RubyGems и Ruby часто была проблемной. Многие версии RubyGems были практически полностью несовместимы с множеством версий Ruby, а некоторые выпуски имели неработающие ключевые функции. Например, Ruby 1.9 распространялся с RubyGems 1.3.7, однако RubyGems 1.4.x не поддерживался в Ruby 1.9. Это означало, что обновление RubyGems в Ruby 1.9 было невозможно до выхода RubyGems 1.5.0 в 2011 году, через два года после выхода стабильной версии Ruby 1.9[6]. Эти проблемы совместимости ускорили развитие RubyGems, что привело к переходу на 4-6-недельный релизный цикл и увеличению числа версий[5].
В период с 2011 по 2016 год вышло 117 релизов, при этом в 2013 году было опубликовано 45 версий — рекордное число выпусков за год для RubyGems[5]
Структура gem
Каждый gem содержит имя, версию и платформу. Gems работают только с Ruby, рассчитанным на определённую платформу, которая определяется по архитектуре процессора, типу и версии операционной системы[7].
Каждый gem включает в себя:
- Код
- Документацию
- Спецификацию gem (gemspec)
Стандартная структура файлов и каталогов для gem с именем gem_name выглядит так:
gem_name/ ├── bin/ │ └── gem_name ├── lib/ │ └── gem_name.rb ├── test/ │ └── test_gem_name.rb ├── README ├── Rakefile └── gem_name.gemspec
- Каталог lib содержит исходный код gem.
- Каталог test (или spec) используют для тестирования.
- Rakefile применяется утилитой Rake для автоматизации тестов и генерации кода.
- README содержит документацию и RDOC для большинства gems.
- Спецификация gem (gemspec) включает сведения об авторе, дате создания и предназначении gem.
Безопасность
Поскольку при установке gems запускается их собственный код в приложении, это может привести к различным уязвимостям, связанным с установкой вредоносных gems. Создатель такого gem может получить контроль над системой или сервером пользователя[8].
Для предотвращения подобных угроз были внедрены ряд мер:


