Besides being a Ruby/Rails/Merb developer, I’m also a part-time sysadmin for a number of previous clients. Usually I’m responsible for maintaining Rails stacks, either for apps that I’ve written or just for another developer that doesn’t have as much Linux experience.
Lately, I’ve had to do a move of a number of Rails installations to completely new/clean servers. I’ve got lots of scripts for doing initial setups of the stack as they need to be. But one thing that comes up is that, especially with older apps, the gem dependencies can be very finicky. Installing the latest versions will almost certainly break something. Plus some times the system can have quite an extensive list.
Yes, I know that the gems should be packaged with the app, but there are a lot of reasons that it doesn’t always happen or doesn’t always work. To that end, I’ve found the most effective method is just to re-install the exact same set of gems on the new box as the old one. To automate this process, I present: gem_cloner.
gem_cloner is a very tiny but useful script that will take the text output of `gem list`from one machine and execute the `gem install` command on the new machine. Usage is very simple:
- On the old machine, run `gem list > gems.txt`
- Copy gems.txt to the new machine.
- Copy the gem_cloner.rb file to the same place
- With sudo or as root, run `ruby gem_cloner.rb`
The script will read that file and install the exact same gem versions. You’ll definitely want to browse and tweak the script. Possibly by adding ‘sudo‘ in the command call or adding ‘–no-rdoc –no-ri‘ (I personally use a gemrc to eliminate the doc files on production systems).
Fork, patch, & praise ad nauseum on github and drop me a line if you like it.