Accueil > Informatique > Installer de multiples versions de Ruby

Installer de multiples versions de Ruby

Comment installer plusieurs versions de Ruby sur un même système ? On se lève quelquefois le matin avec des questions existentielles auquel il est impératif de répondre, ce sera celle du jour. Evidemment, on installe pas plusieurs versions de Ruby tout les jours. Toutefois sur un serveur devant héberger plusieurs sites, avec des versions différentes de Rails, il peut-être utile de mettre à jour chaque site l’un après l’autre pour minimiser les surprises en cas d’incompatibilité. Concrètement installer plusieurs versions de Ruby n’a rien de bien méchant, mais encore faut-il que chaque installation ai ses propres gems, que les chemins soient bons, etc…

Le processus d’installation est un remake de ce post qui contient les informations de bases pour compiler Ruby sur Ubuntu. Mais Ubuntu n’est pas indispensable, ce qui est décrit ici peut se transposer sur une autre distribution ;)

Dans les grandes lignes, l’installation est à effectuer dans des répertoires séparés qui seront précisés avant de compiler Ruby. Puis les compléments seront à installer pour chaque version de Ruby. Enfin, un petit script permet de fixer toutes les variables d’environnement pour utiliser telle ou telle version de Ruby.

Si ce n’est encore fait, installons sur notre manchot de quoi compiler :

sudo apt-get install build-essential zlib1g-dev

Télécharger ce qui est nécessaire. Ici nous allons installer Ruby 1.8.5 et Ruby 1.8.6 :

mkdir telecharger_et_installer
cd telecharger_et_installer
wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.6.tar.gz
wget ftp://ftp.ruby-lang.org/pub/ruby/ruby-1.8.5.tar.gz
wget http://rubyforge.org/frs/download.php/17190/rubygems-0.9.2.tgz
wget  http://www.blue.sky.or.jp/atelier/ruby/ruby-zlib-0.6.0.tar.gz
tar xzf ruby-1.8.6.tar.gz
tar xzf ruby-1.8.5.tar.gz
tar xzf ruby-zlib-0.6.0.tar.gz
tar xzf rubygems-0.9.2.tgz

Maintenant voici comment install Ruby 1.8.6 dans /usr/local/ruby-1.8.6 avec les gems:

cd ruby-1.8.6
./configure --prefix=/usr/local/ruby-1.8.6
make
sudo make install
cd ../ruby-zlib-0.6.0
/usr/local/ruby-1.8.6/bin/ruby  extconf.rb
make
sudo make install
cd ../rubygems-0.9.2
sudo /usr/local/ruby-1.8.6/bin/ruby  setup.rb
cd ..

Maintenant installons Ruby 1.8.5 dans /usr/local/ruby-1.8.5, toujours aves les gems :

cd ruby-1.8.5
./configure --prefix=/usr/local/ruby-1.8.5
make
sudo make install
cd ../ruby-zlib-0.6.0
/usr/local/ruby-1.8.5/bin/ruby  extconf.rb
make
sudo make install
cd ../rubygems-0.9.2
sudo /usr/local/ruby-1.8.5/bin/ruby  setup.rb
cd ..

Vous voilà avec deux installations de Ruby, reste à mettre en place les environnements pour pouvoir les utiliser. Le plus simple est de créer un script pour chaque version qui permet de mettre en place les variables d’environnement. Voici le script en question, qui prends en argument le chemin d’une installation de Ruby (appelons le mon_ruby) :

if [ ! -e "$1/bin/ruby" ]; then
echo Chemin invalide
else
export PATH=$1/bin:$PATH
export GEM_PATH=$1/lib/ruby/gems/1.8
export GEM_HOME=$1/lib/ruby/gems/1.8
export RUBYLIB=$1/lib/ruby:$1/lib/site_ruby/1.8
fi

Maintenant voyons comment mettre à jour tour à tour les gems des deux versions, en guise de test. Attention à la syntaxe pour appeler le script : point espace point slash … :

sudo -s
. ./mon_ruby /usr/local/ruby-1.8.5
ruby --version
gem update --system
exit
sudo -s
. ./mon_ruby /usr/local/ruby-1.8.6
ruby --version
gem update --system
exit

Ceci est livré sans garantie, c’est le fruits d’un simple essai. J’ai très bien pu oublier quelque chose ! Sans compter que dans le cadre de Rails, il faudra envisager des scripts mongrel_cluster séparés, ce qui est un autre problème ;)

Sam. Informatique ,

  1. Pas encore de commentaire
  1. Pas encore de trackbacks