Installer Ruby on Rails sur Debian Sarge avec Apache 2
Par Magu(s) le jeudi 23 février 2006, 14h16 - Informatique - Lien permanent - URL miniature
Cela fait quelques temps que je lorgne vers des altérnatives à php, surtout pas soucis de documentation sur ce que sera le web de demain. Après avoir regardé un petit peu du côté de python, je suis passé à ruby et je dois dire que j'ai été assez séduit par ce langage orienté objet jusqu'au bout des ongles. Et surtout par Ruby on Rails ( RoR pour les intimes ), le framework basé sur le design pattern MVC qui fournit tous les outils pour construire de belles et grosses applications en moins de temps qu'il ne le faut pour écrire "Hello World".
Seulement voilà, même si la documentation sur le sujet est abondante, il n'est pas toujours facile de s'y retrouver entre les modules, interpeteurs et autres composants. Moi-même j'ai eu quelques problèmes de conflits au début entre eruby, mod_ruby et mod_fastcgi qui, tous ensemble, consommaient 90% de mon CPU.
Je vous fais donc part de ma fresh réinstalle basée sur les depots debian, qui sont quand même bien plus facile à maintenir que les sources...
Si vous avez déjà installé ruby sur votre machine ( comme moi ), il n'est pas inutile de nettoyer son système. Ces manipulations ne sont évidemment pas à faire si vous n'avez pas encore ruby.
Pour commencer un petit
geshi bash dpkg -l | grep ruby
pour lister les paquets installés puis on y va à grands coups de
geshi bash aptitude purge paquet
Ensuite il faut virer toutes les librairies à la main et autres bidules installés par compilation.
geshi bash locate ruby > liste.txt
Pour avoir une bonne liste de ce qui est installé sur votre machine ( output dans un txt parce qu'il y en a une chiée ) et on
geshi bash rm -r dossier
Ayez quand même l'oeil, ne virez rien que vous pourriez regretter.
Fresh Reinstall
Quand vous êtes bon, on peut passer à la réinstall ( ou à l'install si vous n'aviez pas encore ruby sur votre machine ). Et c'est une petite partie de plaisir, il suffit d'installer le paquet rails pour que toutes les dépendences s'installent avec lui ( y compris ruby1.8 himself ). Il se trouve sur le dépot testing officiel de Debian.
Mais pour commencer, éditer /etc/apt/apt.conf ( si le fichier n'existe pas, créer-le ) pour prévenir que vous êtes en stable. Ajoutez les lignes suivantes :
geshi bash APT::Default-Release "stable";
Ensuite mettez à jour aptitude :
geshi bash aptitude update
Et installez rails
geshi bash aptitude install rails
Voilà le gros du boulot est fait 
Vous pouvez dès maintenant tester RoR dans avec son petit serveur serveur de dev intégré WEBrick. Pour ça, créez une application RoR :
geshi bash rails /home/user/www/rails
Et lancer WEBrick
geshi bash cd /home/user/www/rails ruby script/server
Vous pouvez admirer le message "Welcome aboard, You’re riding the Rails!" à l'adresse http://localhost:3000.
Si vous utilisez un serveur distant ou que le port est occupé, il suffit relancer WEBrick avec
geshi bash ruby script/server -b monserveur.com -p 5555
N'oubliez pas d'ouvrir le port dans votre firewall, ça peut vous éviter des heures à chercher ce qui ne fonctionne pas, et je sais de quoi je parle 
Faire fonctionner Ruby avec Apache 2
WEBrick c'est bien mais l'idée serait de faire fonctionner RoR avec Apache. Pour ce faire vous avez 2 méthodes, soit le mod_ruby qui va embarquer l'interpreteur ruby directement dans le moteur d'apache, soit le mod_cgi qui va lancer une passerelle entre l'interpreteur extèrne et Apache. Le mod_ruby est connu pour être lent et buggué ( enfin relativisons quand même ), nous allons donc installer ruby en cgi, ou plutôt en fastcgi quite à faire le geek.
Ici les choses se compliquent un tout petit peu, j'ai moi-même eu des problèmes avec le mod_fastcgi qui me créait des instances de ruby sans que je ne lui demandé, j'ai donc opté pour son remplacement, le mod_fcgid qui fait exactement la même chose et a une configuration que je trouve plus claire.
On y va alors :
geshi bash aptitude install libapache2-mod-fcgid libfcgi-ruby1.8
On active le module et on relance Apache
geshi bash a2enmod fcgid /etc/init.d/apache2 restart
Il faut maintenant modifier l'htaccess dans /home/user/www/rails/public/.htaccess
On commente
geshi bash AddHandler fastcgi-script .fcgi
Et on remplace par
geshi bash AddHandler fcgid-script .fcgi
On peut aussi changer la règle de réécriture par :
geshi bash RewriteRule ^(.*)$ dispatch.fcgi \[QSA,L\]
Il reste à créer un vhost rendre tout ça joli
geshi
<VirtualHost *>
ServerName rails.monserveur.com
DocumentRoot /home/user/www/rails/public/
ErrorLog /home/user/www/rails/log/apache.log
<Directory /home/user/www/rails/public/>
Options ExecCGI FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
Et evidemment de recharger Apache2.
Allez jeter un oeil à rails.monserveur.com, vous si vous êtes accuellis par la page de RoR c'est bon 
Ruby Gems
Dernier truc non négligeable, Ruby possède son propre gestionnaire de paquet à la manière de l'apt-get. Ca serait cool de l'installer. J'ai n'ai malheureusement pas pu trouver de paquet rubygems qui soit à jour, il va donc falloir allez chercher les sources sur rubyforge.
geshi bash cd /tmp wget http://rubyforge.org/frs/download.php/5207/rubygems-0.8.11.tgz tar xzvf rubygems-0.8.11.tgz cd rubygems-0.8.11 ruby install.rb
Mettons rubygems à jour
geshi bash sudo gem update --system
Et commenons par installer quelques chouettes gems ( -y inclus d'office les dépendences )
geshi bash gem install BlueCloth RedCloth switchtower syntax -y
Pour finir, installons quelques librairies utiles à ruby
geshi bash aptitude install libgd-ruby1.8 aptitude install libmysql-ruby1.8 aptitude install librexml-ruby1.8
Et voilà, on est prêt à se lancer dans le developpement de belles applications en RoR 
Vous pouvez aussi installer Typo, chouette blog basé sur RoR ou aller consulter quelques tutos sur rubyonrails, railsfrance ou rubyfr.org
Commentaires
Super ton tutoriel Magu !!
Je vais faire un lien vers ta page sur RailsFrance, je suis sur que ça sera bien utile a pas mal de gens.
--
nuxygen
Attention que la dernière version du svn de typo ne fonctionne pas avec la version de rails dispo dans sur le depot debian. Elle est apparement trop ancienne. Il faut alors désinstaller les paquet rails et rake ( pas les autres ) et réinstaller rails par un "gem install rails".

A moins qu'il y ai un autre moyen de mettre rails à jour
Magu :
Qu'est-ce que tu lui reproche au PHP, il est gentil le PHP,c'est parce que tu vas au Werchter 2006 que tu n'aimes plus le PHP ?
Ah le Werchter 2006...
Je lui reproche rien à php, c'est très bien php, mais ce que propose RoR avec sa syntaxe objet et son implémentation du Model-View-Controller, rooh, je te parie un vieux slip que dans 10 ans tout le monde à oublié php pour faire du ruby sur les rails
Tu es sûr que tu n'as pas du modifier ton /etc/apt/sources.list ?
Lorsque je fais un aptitude install rails sur ma sarge (3.1) il n'a pas l'air de trouver...
En fait c'est ce que je dois mettre dans mon /etc/apt/sources.list pour avoir access au dépot testing que j'ai besoin de connaitre.
J'aimerais que ça n'influence que ruby seulement...
Le plus facile est finalement de n'installer que gem ( dernière partie du tuto ) et de faire un gem install rails. Comme ça tu récupères la dernière version du subversion et tu ne touches à rien d'autre qu'à ruby ( parce que parfois aptitude gère de façon peu compréhensible les dépendances ).
Bien clair ! sauf pour cette partie:
Il reste à créer un vhost rendre tout ça joli
<VirtualHost *>
ServerName rails.monserveur.com
DocumentRoot /home/user/www/rails/public/
ErrorLog /home/user/www/rails/log/apache.log
<Directory /home/user/www/rails/public/>
Options ExecCGI FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
dans quel fichier faut-il mettre ce bout de code?
et ensuite, c'est vraiment monserveur.com, qu'il faut mettre?
Pardon si mes questions semblent un peu débiles...
c'est dans ta configuration Apache que ça se passe :
/etc/apache2/sites-available/tondomaine
imaginons que ton domaine soit "unsitebien.net", tu mettras donc :
ServerName rails.unsitebien.net dans le nouveau vhost
mais magu va apporter son expérience et mettre un peu de clarté là-dedans
Ok... merci beaucoup pour le tuto, qui fonctionne aussi sous Ubuntu 6.06.
J'ai du rajouter le module rewrite pour qu'Apache puisse fonctionner avec la page Ror donnée.
A+,
Eric
ton pseudonyme est un poème fleuri.
Il manque un truc non entre
APT::Default-Release "stable";et
aptitude updateParce que je ne vois pas comment apt peut récupérer les paquets testing sinon.