This project is an opinionated wrapper around Gem in a Box for managing private gem dependencies in an offline development environment.
Installation
Via RubyGems
gem install gemkeeperVia Homebrew (MacOS)
brew tap danhorst/gemkeeper
brew install gemkeeperForumla: danhorst/homebrew-gemkeeper
Quick Start
- Create a configuration file at
~/.config/gemkeeper/config.yml:
port: 9292
gems:
- repo: git@github.com:company/internal-gem.git
version: latest- Start the server:
gemkeeper server start- Configure your Rails app to use the local gem server:
# Gemfile
source "http://localhost:9292" do
gem "internal-gem"
end- Sync your gems:
gemkeeper syncConfiguration
Gemkeeper looks for configuration files in these locations (in order):
-
./gemkeeper.yml(current directory) ~/.config/gemkeeper/config.yml~/.gemkeeper.yml-
/usr/local/etc/gemkeeper.yml(Homebrew on Intel) -
/opt/homebrew/etc/gemkeeper.yml(Homebrew on Apple Silicon)
Configuration Options
# Port for the Geminabox server (default: 9292)
port: 9292
# Where to clone gem repositories (default: ./cache/repos)
repos_path: ./cache/repos
# Where to store built gems (default: ./cache/gems)
gems_path: ./cache/gems
# PID file location (default: ./cache/gemkeeper.pid)
pid_file: ./cache/gemkeeper.pid
# List of gems to manage
gems:
- repo: git@github.com:company/gem-one.git
version: latest # Use the latest commit on main/master
- repo: git@github.com:company/gem-two.git
version: v1.2.3 # Use a specific tag
- repo: git@github.com:company/ruby-gem-three.git
name: gem-three # Override the gem name (strips "ruby-" prefix by default)CLI Commands
Server Management
# Start the server (daemonized)
gemkeeper server start
# Start in foreground (for services/debugging)
gemkeeper server start --foreground
gemkeeper server start -f
# Start on a specific port
gemkeeper server start --port 8080
# Stop the server
gemkeeper server stop
# Check server status
gemkeeper server statusGem Synchronization
# Sync all configured gems
gemkeeper sync
# Sync a specific gem
gemkeeper sync internal-gemOther Commands
# List cached gems
gemkeeper list
# Show version
gemkeeper versionGlobal Options
All commands support:
--config PATH # Use a specific config fileRunning as a Service
Homebrew Services (macOS)
If installed via Homebrew:
# Start and enable at login
brew services start gemkeeper
# Stop the service
brew services stop gemkeeper
# Check status
brew services info gemkeeperManual Background Mode
# Start daemonized
gemkeeper server start
# Check if running
gemkeeper server status
# Stop
gemkeeper server stopHow It Works
- Clone/Pull: Gemkeeper clones (or pulls) gem repositories to a local cache.
-
Build: Builds
.gemfiles from the source at the specified version/tag. - Upload: Uploads built gems to a local Geminabox server.
- Proxy: Geminabox proxies public gems from RubyGems.org, so you only need one gem source.
This lets you use a combination of public and private gems from a single gem source.
Development
bundle install
bundle exec rake test # Run tests
bundle exec rubocop # Run linter