"If you work on multiple Ruby projects concurrently,
you’re probably accustomed to juggling gems. One project
requires one batch of gems; another effort depends on a different
set; and a third project utilitizes a specific legacy gem.
Thankfully, the Ruby gem system can maintain multiple versions of
the same gem in a single repository, making much of this task easy.
If you need an explicit version of a gem (or any late model
version, such as 3.x), simply install the code you need and name
"But what if you want to test your code with different versions
of the same gem? Worse, what if each variant of the gem depends on
multiple versions of other gems? Soon you are wrestling with a
morass of interdependencies and no effective technique to enforce
and ensure revision locking among any prescribed subset.
"One solution is a virtual machine per configuration. Create a
base image and create an instance for each permutation.
That’s workable, albeit very time-consuming to establish and