Rbenv : Careful With That Rubies, Rbenv

This post is about the alternative of RVM (which I presented to you in my last post) – Rbenv. I like the open source world, there are always alternatives…

You’ll ask : “What’s the difference?”. Hmm there are differences:
<<< RVM is tool, designed to bring you listing of all available rubies in the net, downloading and compiling them, switching between them, gemsets.
>>> Rbenv is tool for switching between ruby versions. You download and install the rubies, you decide what tool for dividing the gems to sets should be used.
<<< RVM overrides the ‘cd’ command, in other words when you change directory, the command also ‘looks’ for .rvmrc file in it and executes it. This way you can heave per-project ruby versions.
>>> Rbenv changes the executables in you downloaded gems so if you execute ‘rails’ it looks for .rbenv_version file in the current directory (or in its parents if there is no such file) and uses it to decide the version.
<<< RVM is all in one.
>>> Rbenv has a plugin system and can be set up to be on par with RVM‘s functionality.

If you ask me, which is better, I’ll sincerely answer you – it depends. The important thing is – you should use a tool that works for you, helps you and doesn’t get in your way. For now I prefer Rbenv, because I like the idea of upgrating/downgrating thing through plugins…

Now, this will be a tutorial similar to the one in the post for RVM, I’ll teach you to do the same stuff but with Rbenv.

First of all if you have RVM, remove it the two tools don’t work well together:

rvm implode

Now let us install Rbenv:

git clone git://github.com/sstephenson/rbenv.git ~/.rbenv

This downloads Rbenv in your home’s .rbenv directory.

echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile

This prepends the rbenv commands to your PATH. For Ubuntu and Mint use .profile, for zsh – .zshrc.

echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

This enables shims and auto-completion.Again for Ubuntu and Mint use .profile, for zsh – . You can read more about shims at the Rbenv's github.

exec $SHELL -l

This will restart your shell and the PATH changes will take effect.

We can list the available ruby versions with this:

rbenv versions

We don’s have rubies. So how to install one? I said that Rbenv can only switch between already installed rubies, so you can download ruby binary or source (and compile it) and put it in .rbenv/versions, for example ‘~/.rbenv/versions/1.9.3-p429’. But there is another way. I mentioned earlier, that Rbenv has a plugin system, so we will install a plugin called ruby-build which purpose is to download and install/uninstall rubies.

mkdir -p ~/.rbenv/plugins
cd ~/.rbenv/plugins
git clone https://github.com/sstephenson/ruby-build.git

This is it. To install a plugin, all you have to do is to put it in  ~/.rbenv/plugins. Now lets list the known rubies:

rbenv install --list

Cool. Now to install ruby 1.9.3, patch 429:

rbenv install 1.9.3-p429
rbenv rehash

The second line is important. When you download rubies or executable gems, you will have to run it to update the shim files. Now we have ruby 193-p429. Lets select it globally:

rbenv global 1.9.3-p429

This is the default ruby as of now. You can view it with ‘rbenv global’ or ‘rbenv version’.
Let us continue following my RVM post and to install ruby 2.0.0 with rails:

rbenv install 2.0.0-p195
rbenv rehash
rbenv global 2.0.0-p195
gem install rails
rbenv rehash

Everything is done, now if you run ‘rails -v’ you will have Rails 3.2.13 installed, but if you switch the global ruby with ‘rbenv global 1.9.3-p429’, I won’t have rails installed.

Gemsets… You don’t have them. If you want something similar, you will have to install a plugin.

mkdir -p ~/.rbenv/plugins
cd ~/.rbenv/plugins
git clone git://github.com/jamis/rbenv-gemset.git

So we have the gemset plugin. The idea is that you can include gemsets in a project. Create somewhere a directory for a rails 4 project. Go to this directory and execute:

echo rails4 > .rbenv-gemsets

Now for this folder the gemset is rails4, if you want to use this gemset in another project just navigate to its root folder and execute the above command. That’s it. So now if we are in a folder that is modified this way, we can install rails 4:

gem install rails --version 4.0.0.rc1 --no-ri --no-rdoc

Try it, if you are in the folder the rails version is 4, if you navigate out of it is 3.2. Now the same useful things as in the post for RVM:

  1. To delete a gemset, just delete the .rbenv-gemsets folder.
  2. To use the system ruby just delete the global version file – ~/.rbenv/version or run
    ‘rbenv global system’. If you have problems look at RBENV_VERSION environment variable, you may have to unset it.
  3. To update Rbenv just navigate to ~/.rbenv and pull the newest version through git.
  4. To delete Rbenv just delete the ~/.rbenv  folder and clear your shell’s profile file from Rbenv specific stuff.

Useful Links:

  1. Rbenv site – http://rbenv.org
  2. Ruby Toolbox’s page about Ruby Version Managers – https://www.ruby-toolbox.com/categories/ruby_version_management
  3. Cool post about RVM and Rbenv – http://jonathan-jackson.net/rvm-and-rbenv
  4. Rbenv plugins – https://github.com/sstephenson/rbenv/wiki/Plugins



Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s