Репозитории формата RubyGems работают с клиентами gem и bundle. В примерах используются условные имена rubygems-proxy и rubygems-hosted.

Подключение к proxy

Направьте Bundler на proxy-репозиторий зеркалом:

bundle config mirror.https://rubygems.org https://<GALLEON_HOST>/repository/rubygems-proxy

Установка одиночного гема — порядок флагов важен, --clear-sources должен идти до --source:

gem install colorize --clear-sources \
  --source https://<USERNAME>:<PASSWORD>@<GALLEON_HOST>/repository/rubygems-proxy

Установка из hosted-репозитория

Гемы, опубликованные в hosted-репозитории, подключаются источником в Gemfile:

source "https://<GALLEON_HOST>/repository/rubygems-hosted" do
  gem "foo"
end

Учётные данные для Bundler задаются командой (работает и для зеркала из предыдущего раздела):

bundle config set --global <GALLEON_HOST> <USERNAME>:<PASSWORD>

Публикация

Клиент gem передаёт значение ключа авторизации как есть, поэтому в ~/.gem/credentials записывается готовая строка Basic <BASE64> (файл должен иметь права 0600):

---
:galleon: Basic <BASE64>
gem build foo.gemspec
gem push foo-1.0.0.gem --key galleon --host https://<GALLEON_HOST>/repository/rubygems-hosted

Особенности

Особенности формата:

  • Опубликованные версии неизменяемы: повторная публикация той же версии отклоняется.
  • Команда gem yank не поддерживается — версия удаляется через веб-интерфейс кнопкой «Удалить компонент» (нужна привилегия delete).
  • Разрешение зависимостей идёт по протоколу Compact Index; классические команды (gem fetch, gem list --remote) тоже работают.