

The Heist for Rubygems - jcsalterego
http://jcsalterego.github.com/2011/03/26/the_heist_for_rubygems.html

======
mrud
> Has this been done already?

A more general approach which also covers python/php modules as well as system
packages, configuration files, installed software on /usr/local , .. is
blueprint <https://github.com/devstructure/blueprint> /
<http://devstructure.com/>

What it basically does is to analyse your system, create a list of packages
and files, save it in a git repository and allows you to export it to various
different formats like shell script or puppet or chef.

Btw. this is IMHO a really big deal. Not only can you clone your environment
easily, but it helps you to create a managed environment as you have at least
a starting point to create your puppet manifests/chef recipes or at least
shell scripts. And as it uses git you can easily use it to create distributed
configuration backups of your systems. Oh and as the default output format is
JSON you can start to create webservices showing the state of your
servers/create a more convenient overview about your systems.

------
telemachos
> Has this been done already?

I can think of a few things that are in the general area or cut across the
problem you're solving here, but not anything exactly like it.

Bundler and Isolate work at the level of single projects or applications, so
that's not quite what you're doing here.

Rvm provides gemsets, and the global gemset is closer to what Heist does. You
can fill it with items that get installed automatically when you install any
new Ruby interpreter. But I'm not sure that you can use it to automate
installation of multiple versions of one gem (as you show with redis in your
example). (You can also export and import gemsets which solves some of the
pain you describe with moving from server A to server B.)

------
halostatue
Why not make it a RubyGems plug-in?

    
    
      % gem heist

~~~
burke
My old boss built more or less this:
<https://github.com/pallan/gem_import_export>

------
glenjamin
I see what this is doing, but I don't see why.

What's the common use-case for transplanting lists of gems from one box to
another in a non project-specific way (which would be handled via gemcutter).

~~~
philwelch
Setting up a new or reformatted development machine, or as a workaround for
legacy projects where using gemfiles and Bundler is impractical.

------
createaccount94
the same in one line:

Gem.loaded_specs.map{|n,s| "gem install #{n} --version=#{s.version}"} * "\n"

