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