Installer Passenger mod_rails sous Debian
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.
