S’il existe un grand nombre de manières de déployer et de faire tourner des applications développées avec Ruby on Rail, comme, au hasard, ce blog, l’hébergement de masse reste encore un vrai problème, principalement pour des raisons de complexité de configuration côté serveur. L’absence sous Apache d’un modrails comme il existe un modphp y était certainement pour beaucoup, jusqu’à la sortie hier de Passenger, aussi appelé modrails. Enfin terminés les atermoiements entre mongrel + modproxy, ou fastcgi, avec tous les inconvénients inhérents à ces deux solutions. Il existe certes d’autres solutions logicielles, parmi lesquelles ma préférée va à Nginx + Thin, cependant quand on héberge des sites faisant très massivement appel à mod_rewrite, ces dernières sont malheureusement exclues (à moins que quelqu’un ne me porte les quelques 500 rewrite rules qui restent encore ici et là).

Mais sans plus attendre, rentrons immédiatement dans le vif du sujet, l’installation de mod_rails pour Apache 2 sous Debian.

Installation d’Apache 2 et MySQL 5

Dans un premier temps, installez le serveur web Apache 2.2, et la version 5.0 de la base de données MySQL.

7el.net:~$ sudo aptitude update
7el.net:~$ sudo aptitude install mysql-client-5.0 mysql-server-5.0 apache2-mpm-prefork apache2.2-common apache2-utils libmysqlclient-dev libfcgi-dev apache2-dev libapr1-dev 
[...]
7el.net:~$ sudo a2enmod rewrite    

Dans le cas où Aptitude ne vous demanderait pas de mot de passe root, n’oubliez-pas de taper :

7el.net:~$ mysqladmin -u root -h localhost -p 'toto'

Il est évidemment fort peu recommandé de choisir “toto” comme mot de passe root, mais après tout, chacun fait comme il veut.

Ruby et… Rails

Installez maintenant Ruby, rdoc et irb depuis les paquetages Debian, puis Ruby Gem à l’aide des sources afin de bénéficier de la toute dernière version. Gem est le gestionnaire de paquetages de Ruby, un outil absolument indispensable.

7el.net:~$ sudo aptitude install ruby1.8 ruby1.8-dev rdoc irb build-essential
[...]
7el.net:~$ cd /usr/bin
7el.net:/usr/bin$ sudo ln -s ruby1.8 ruby

Ne soyez surtout pas impressionné par la quantité de paquetages à récupérer, nous aurons besoin de compiler un certain nombre de choses, et sans les build-essential, nous n’arriverons à rien.

Récupérez maintenant les sources de la dernière version de Gem, actuellement la 1.0.1, et installez la.

7el.net:/usr/bin$ cd /tmp
7el.net:/tmp$ wget http://rubyforge.org/frs/download.php/35283/rubygems-1.1.1.tgz
[...]
7el.net:/tmp$ tar xvzf rubygems-1.1.1.tgz
7el.net:/tmp$ cd rubygems-1.1.1
7el.net:/tmp/rubygems-1.1.1$ sudo ruby setup.rb    

Installons maintenant notre framework favori, ainsi que le driver MySQL.

7el.net:~$ sudo gem install rails
7el.net:~$ sudo gem install mysql

Et voilà, ce n’est pas tellement plus difficile que ça. Passons maintenant aux choses sérieuses : Passenger.

Installer Passenger mod_rails

Si vous avez suivi toutes les étapes de ce didacticiel, l’installation de Passenger ne devrait pas poser de problèmes.

7el.net:~$ sudo gem install passenger
7el.net:~$ sudo passenger-install-apache2-module

Voilà, c’est terminé. Ajoutez maintenant les lignes suivantes à votre fichier de configuration Apache :

7el.net:~$ sudo echo "LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-1.0.1/ext/apache2/mod_passenger.so" >> /etc/apache2/apache2.conf
7el.net:~$ sudo echo "RailsSpawnServer /usr/lib/ruby/gems/1.8/gems/passenger-1.0.1/bin/passenger-spawn-server" >> /etc/apache2/apache2.conf
7el.net:~$ sudo echo RailsRuby /usr/bin/ruby1.8 >> /etc/apache2/apache2.conf
7el.net:~$ sudo /etc/init.d/apache2 restart

Ajouter une application Rails

Ajouter une application Rails devient aussi simple (plus simple ?) qu’ajouter un site en PHP : il vous suffit de rajouter un vhost basique à votre Apache.

<VirtualHost 91.121.17.203:80>
    ServerName t37.net
    DocumentRoot /some/path/t37.net/public
</VirtualHost>

Redémarrer une application sans redémarrer Apache

La cerise sur le gâteau, sans laquelle ce mod_rails n’aurait jamais été utilisable, c’est évidemment la possibilité de redémarrer votre application sans redémarrer le serveur : il vous suffit de créer un fichier nommé restart.txt dans le répertoire tmp de votre application.

touch /some/path/t37.net/tmp/restart.txt

Et voilà, c’est terminé. Quant à moi, je vous laisse, il faut que j’aille supprimer mod_fcgid de mon serveur.

surfer dans la baie des sables d'olonne

Perry the Platypus wants you to subscribe now! Even if you don't visit my site on a regular basis, you can get the latest posts delivered to you for free via Email: