Updated (Feb 13, 2014): Fixed my poor English. And note that I hadn't encountered problem around my global rbenv installation for a year.
When we want to have ruby
in a server, sometime we can't use the system's package manager.
Because package managers (in almost distros) serve older Ruby. Plus, they may have weird complex rubygems integration.
So the following are my ideas to get Ruby in your servers:
-
Build packages by ourselves: deb, rpm, ebuild
- I think helpful when you have many servers, but when not, it might be overkill.
- Building and maintaining packages are boring stuff.
-
Install ruby by hand:
make && make install
- Difficult to control later. What you do when you want to uninstall ruby?
- How to upgrade cleanly?
-
Version Managers: Install rbenv, rvm
- I think this is the bet solution; at least for me.
- I prefer
rbenv
because it's made simple.rvm
changes many shell behaviors. rbenv
is great for installing globally.
So, I'm using rbenv for my servers.
But Ruby is used from many users (including system users, daemons). Normally we install rbenv in ~/.rbenv
, but it's depends on user's shell ($PATH
) configuration and user's home directory.
Here's how I installed rbenv in global.
Install rbenv and ruby-build
I used /usr/local/rbenv
for place rbenv.
sudo -i
cd /usr/local
git clone https://github.com/sstephenson/rbenv rbenv
mkdir -p rbenv/plugins
git clone https://github.com/sstephenson/ruby-build rbenv/plugins/ruby-build
RBENV_ROOT
rbenv looks RBENV_ROOT
for many paths. In default (= when not specified), ~/.rbenv
is set.
When installed rbenv in /usr/local/rbenv
, we should set it to RBENV_ROOT=/usr/local/rbenv
.
Install ruby in rbenv by ruby-build
Simply do:
sudo env RBENV_ROOT=/usr/local/rbenv install 1.9.3-p374
sudo env RBENV_ROOT=/usr/local/rbenv rehash
Then, set installed ruby to default ruby:
sudo env RBENV_ROOT=/usr/local/rbenv global 1.9.3-p374
Okay, we've done setup ruby on /usr/local/rbenv/shims/ruby
. but, still requires to set $PATH
. Let's solve it.
global-rehash
I wrote simple plugin for rbenv: https://github.com/sorah/rbenv-global-rehash
This generates symbolic links and scripts from ${RBENV_ROOT}/shims
and ${RBENV_ROOT}/bin
into specified directory.
For ${RBENV_ROOT}/bin
, this plugin generates script to invoke with suitable $RBENV_ROOT
.
But scripts in ${RBENV_ROOT}/shims
(generated by rbenv rehash
) already contains export RBENV_ROOT
, so this script generates symlink for shims
.
Install this:
sudo git clone https://github.com/sorah/rbenv-global-rehash /usr/local/rbenv/plugins/rbenv-global-rehash
Then,
sudo env RBENV_ROOT=/usr/local/rbenv rbenv global-rehash /usr/local/bin
Finally you can:
/usr/local/bin/rbenv versions
/usr/local/bin/ruby -v
# RBENV_ROOT will not be required after the first run
sudo rbenv global-rehash /usr/local/bin
Enjoy!