Introducing RVM

If you follow Rails, then this weekend may have highlighted what some consider to be a drawback to the framework. Over the weekend Rails was updated to version 2.3.6 and then again to version 2.3.7. Most of these changes are in preparation for Rails 3.

All these version changes can become quite annoying, but luckily Wayne Seguin has developed the Ruby Version Manager (RVM) to help you keep your environments separated so you can have multiple versions of Rails setup, with their respective gems, and he has even made it extremely easy to switch between them using the RVM gemsets. So if you want to try out Rails 3 without killing your current apps, create a gemset for Rails3 switch to it, and you’re all set. Need to go back to work on that Rails 2.3.5 project, switch gemsets and you’re back to 2.3.5.

Here’s the link http://rvm.beginrescueend.com/ As an added bonus, it is very well documented, so you should be able to get up and running very quickly.

Worth pointing out that RVM doesn’t work on Windows! It appears efforts are being made to create a Windows app with similar functionality. For example: http://github.com/vertiginous/pik

Freezing your version of rails causes rails to copy itself into the vendor/plugins directory and is on a per app basis. RVM creates new environments that can be used for multiple projects. Here is a snippet from the RVM website that can better explain it.

RVM is a command line tool which allows us to easily install, manage and work with multiple ruby environments from interpreters to sets of gems.

RVM allows users to deploy each project with its own completely self-contained and dedicated environment–from the specific version of ruby all the way down to the precise set of required gems to run the application. Having a precise set of gems also avoids the issue of version conflicts between projects…

Hope this helps explain the difference.

Sounds like something very helpful and useful.

How does this differ from “freezing”?

Yes, thank you. So instead of needing a copy in each app, each app only needs to reference the one copy it needs. Sounds a lot more efficient and I like that.