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 включает в себя:

  1. Код
  2. Документацию
  3. Спецификацию 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].

Для предотвращения подобных угроз были внедрены ряд мер:

  • Криптографическая подпись gems начиная с RubyGems версии 0.8.11 (с помощью команд gem cert и gem install).
  • Рассматриваются и обсуждаются новые модели подписей, такие как X509 и OpenPGP.

Примечания

Ссылки