Project

gemkeeper

0.0
No release in over 3 years
An opinionated wrapper around Gem in a Box to manage private gems in a development environment.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies

Runtime

~> 1.0
~> 2.0
~> 2.0
~> 6.0
 Project Readme

Gemkeeper

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 gemkeeper

Via Homebrew (MacOS)

brew tap danhorst/gemkeeper
brew install gemkeeper

Forumla: danhorst/homebrew-gemkeeper

Quick Start

  1. Create a configuration file at ~/.config/gemkeeper/config.yml:
port: 9292
gems:
  - repo: git@github.com:company/internal-gem.git
    version: latest
  1. Start the server:
gemkeeper server start
  1. Configure your Rails app to use the local gem server:
# Gemfile
source "http://localhost:9292" do
  gem "internal-gem"
end
  1. Sync your gems:
gemkeeper sync

Configuration

Gemkeeper looks for configuration files in these locations (in order):

  1. ./gemkeeper.yml (current directory)
  2. ~/.config/gemkeeper/config.yml
  3. ~/.gemkeeper.yml
  4. /usr/local/etc/gemkeeper.yml (Homebrew on Intel)
  5. /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 status

Gem Synchronization

# Sync all configured gems
gemkeeper sync

# Sync a specific gem
gemkeeper sync internal-gem

Other Commands

# List cached gems
gemkeeper list

# Show version
gemkeeper version

Global Options

All commands support:

--config PATH    # Use a specific config file

Running 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 gemkeeper

Manual Background Mode

# Start daemonized
gemkeeper server start

# Check if running
gemkeeper server status

# Stop
gemkeeper server stop

How It Works

  1. Clone/Pull: Gemkeeper clones (or pulls) gem repositories to a local cache.
  2. Build: Builds .gem files from the source at the specified version/tag.
  3. Upload: Uploads built gems to a local Geminabox server.
  4. 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