We recently switched from RVM to rbenv for managing Ruby versions.
“Make each program do one thing well.” - Tenet #2 of The UNIX Philosophy
Why consider switching to rbenv
The UNIX philosophy espouses an approach to software in which small, sharp tools are designed and used to address discrete needs. By this standard, RVM simply does too much. RVM is responsible not only for changing Ruby versions, but for installing rubies and managing gemsets, as well.
Breaking these responsibilities apart and selecting a tool for each job is a good alternative to using RVM. Along with rbenv, we’re using Bundler to manage gems (replacing gemsets) and ruby-build to install rubies.
How our rbenv workflow works
- Uses ruby-build to install Rubies
- Relies on Bundler and its’ binstubs to manage gems
- Uses shims to handle executable gems
- Updates shims upon receipt of the
rbenv rehash
command after new Ruby executables are installed (rehashing can be automated with the gem rehash plugin) - Installs everything to
~/.rbenv/
How to switch from RVM to rbenv
Check out our laptop script to see our process for installing rbenv, or follow the steps below.
If you’re a tmux user, be sure to kill all your tmux sessions before installing rbenv to prevent RVM from polluting your environment.
In your root directory, remove RVM from your system:
rvm implode
Restart your shell to ensure you’re beginning your rbenv installation in a clean environment:
exec $SHELL -l
Next, install rbenv using homebrew:
brew update
brew install rbenv
Configure your bash or zsh profile:
echo 'eval "$(rbenv init -)"' >> ~/.zlogin
source ~/.zlogin
Install ruby-build and rbenv rehash gem using homebrew:
brew install rbenv-gem-rehash
brew install ruby-build
Install your preferred version of Ruby and set it as the global default:
rbenv install 2.0.0-p353
rbenv global 2.0.0-p353
Update to the latest Rubygems version:
gem update --system
Install gems critical to Rails development, e.g.
gem install bundler foreman pg rails thin --no-rdoc --no-ri
You can set project-specific Ruby and gem versions by running the rbenv local
command within your project directory:
rbenv local 2.0.0-p247
If you follow the steps above and find you’re having issues with rbenv, check your echo $PATH
. Most likely you’re not seeing the appropriate ~/.rbenv
dir.
If so, you either haven’t added the init to your zsh profile, or something else is mangling the path.
Extras
- To ease the transition, install the use plugin, which lets you run RVM-style commands with rbenv
- rbenv-binstubs is a handy plugin that allows you to omit
bundle exec
when you run commands