In my daily work I have to switch between projects and databases a lot, forcing me to install lots of services: mongo, postgre, mysql, memcached, elasticsearch, and a lot more. This turned out to be a mess, difficult to maintain and reproduce.
I had tried Vagrant for virtualization, but I was not happy with the virtualbox performance: I don’t like wasting memory and CPU time. I was going to try KVM, but a friend suggest “LXC” (Linux Containers).
LXC is often considered as something in the middle between a chroot on steroids and a full fledged virtual machine
The combination with Vagrant is just amazing: superfast and stable. I love it. I can start and stop projects along all their services in a breeze. And the best part: Vagrant supports very nice puppet integration, so I have written some simple recipes to install everything a project needs. I can run “vagrant destroy” and “vagrant up” and have a new working environment in minutes. This is how the VagrantFile and recipe looks like:
By the way, using Vagrant I got tired of using SSH to start thin. I foung a nice old tutorial (written for hardy!) that still works wonders to set up thin as a system service: http://articles.slicehost.com/2008/5/6/ubuntu-hardy-thin-web-server-for-ruby.
I have also heard about Docker with also uses LXC in the background, but it looked too complex for my needs :).