Skip to content

Past ideas (~2020) Ideas for Gemstash

Koichi Sasada edited this page Feb 19, 2021 · 1 revision

Gemstash is both a cache for remote servers such as https://rubygems.org, and a private gem source. If you are using bundler across many machines that have access to a server within your control, you might want to use Gemstash. If you produce gems that you don't want everyone in the world to have access to, you might want to use Gemstash. If you frequently bundle the same set of gems across multiple projects, you might want to use Gemstash.

Add backends for Gemstash storage of private gems

Today, Gemstash is only able to store private gems directly on disk. That's fine for relatively small setups, but becomes a problem when users want to run multiple web servers for redundancy, or need to store more gems than easily fit on a small server's hard disk.

This project would include extending Gemstash to support storing gems in other places. At a minimum, that would mean building a system for multiple backends and implementing the existing local disk storage as one of those backends. Ideally, it would also include implementing a backend for storing private gems in S3, to demonstrate that the backends system works for different kinds of backends.

  • Prerequisites: Familiarity with Ruby, familiarity with RubyGems or AWS S3 a bonus
  • Programming areas include: Ruby, AWS S3
  • Estimated difficulty level: easy to medium
  • Potential mentors: @indirect, gemstash team

Implement full offline caching for Gemstash

While Gemstash is intended to be a caching server, it was originally written to optimize the amount of time needed to transfer gem data to a given place. For example, Gemstash might run inside a data center, or inside an office of software developers, to allow many nearby machines extremely fast access to the gems that all of those servers use.

Since Gemstash was released, it's become clear that many Ruby devs are interested in using Gemstash as a fully offline cache for gems they need. It might be because they're on an airplane, or camping somewhere without internet access, but whatever the reason, it would be great to ensure that Gemstash can continue working as a gem server when it no longer has an internet connection.

This project would likely mean adding support for the RubyGems.org compact index to Gemstash, so it can continue to serve gem information to Bundler even when it has no internet connection.

  • Prerequisites: Familiarity with Ruby, familiarity with RubyGems a bonus
  • Programming areas include: Ruby, RubyGems.org
  • Estimated difficulty level: medium
  • Potential mentors: @indirect, gemstash team