Comment installer, configurer et utiliser eRuby pour le développement web

Pour un projet web particulier avec Ruby, j’avais besoin d’utiliser eRuby sur un serveur Debian Lenny.
Pas Ruby and Rails, pas mod_ruby, juste eRuby. La documentation sur internet n’est pas pléthorique.
Que ce soit pour la configuration de eRuby avec le serveur web apache ou pour son utilisation, il faut
jouer au détective. Et si vous ne maîtrisez pas l’anglais, vous pouvez passer votre chemin.
Voilà donc un petit topo, pour les francophones, sur la configuration et l’utilisation de eRuby en développement web.

Installation de eRuby

Çà c’est facile et rapide. Si vous pouvez, utilisez Synaptic, sinon passez par la ligne de commande
en tant que root :

apt-get install eruby</pre>

Configuration

J’ai trouvé une bonne partie de la marche à suivre dans un commentaire sur le forum http://ubuntuforums.org/showthread.php?t=356350.
Les commandes suivantes sont à lancer en tant que root.

Activez les actions de apache.
C’est ce qui m’a vraiment fait perdre du temps pendant mes recherches, car elles ne sont pas activées par défaut dans lenny.

a2enmod actions

Dire à apache ce qu’il doit faire quand il tombe sur le type mime eruby.
La ligne suivante ajoute la ligne ‘Action application/x-httpd-eruby /cgi-bin/eruby’ dans le fichier
/etc/apache2/conf.d/ruby.conf. Si ce fichier n’existe pas, il est créé.

echo 'Action application/x-httpd-eruby /cgi-bin/eruby' &gt;&gt; /etc/apache2/conf.d/ruby.conf

Lier le binaire eruby pour qu’apache le trouve.
La ligne suivante crée un lien symbolique vers le binaire eruby dans un répertoire connu de apache.
La commande `which eruby` recherche le fichier eruby sur votre ordinateur.

ln -s `which eruby` /usr/lib/cgi-bin/eruby

Créer le type mime eruby si il n’existe pas.
Tapez :

grep 'application/x-httpd-eruby' /etc/mime.types

Si vous obtenez une réponse, c’est bon. Sinon tapez :

echo 'application/x-httpd-eruby rhtml' >> /etc/mime.types

Modifier la directive DirectoryIndex.
Ouvrez le fichier /etc/apache2/mods-available/dir.conf à l’aide de la commande suivante (remplacez
geany par votre éditeur favori) :

geany /etc/apache2/mods-available/dir.conf

Puis ajoutez y ‘index.rhtml’ pour que votre navigateur trouve automatiquement le bon fichier index.
Votre fichier dir.conf devrait maintenant ressembler à ce qui suit, enregistrez-le :

<IfModule mod_dir.c>
  DirectoryIndex index.html index.cgi index.pl index.php index.rhtml
</IfModule>

Créer un dossier de test.
Remplacer toto par votre pseudo.

mkdir /var/www/test/
chown toto:toto /var/www/test/

Redémarrer apache

/etc/init.d/apache2 reload

Tester
Créez le fichier hello.rhtml suivant et pointez votre navigateur à l’adresse http://localhost/test/

echo '<html><body><h1><%= "Hello World" %></h1></body></html>' > /var/www/test/hello.rhtml

Utilisation

Maintenant que eRuby est installé et que apache est proprement configuré, on peut s’amuser.

Introduction

Le programme eRuby interprète le code Ruby situé entre les balise <% et %>. Modifiez le fichier
index.rhtml ainsi :

<%
azerty
%>

Ce qui ne veut strictement rien dire en Ruby. Pointez votre navigateur sur http://localhost/test/ comme tout à l’heure pour voir une belle erreur 500 de la part du serveur apache. J’ai bien dit « de la part d’apache », eRuby n’a pas bronché. Pour activer le débogage, modifiez le fichier ainsi :

<%
$DEBUG = true
azerty
%>

Actualisez votre page, c’est maintenant eRuby qui vous signale l’erreur :

ERROR
/var/www/test/bonjour.rhtml:3: undefined local variable or method `bonjour' for main:Object (NameError)

Le dossier dans lequel s’exécute votre script est celui du lien symbolique vers le binaire eruby.
Vous pouvez le voir ainsi :

<%
$DEBUG = true
puts Dir.pwd
%>

Ce qui ne pose aucun problèmes pour inclure un fichier de la librairie standard de Ruby, mais qui peut vous empêcher d’inclure vos propres fichiers. Pour remédier à cela, changez le dossier de travail au début de votre index.rhtml grâce à

Dir.chdir(File.dirname(__FILE__))

Utiliser du code Ruby d’un autre fichier

Créez le fichier ‘personne.rb’, à coté de ‘index.rhtml’.

fichier ‘personne.rb’ :

class Personne
  attr_reader :prenom, :nom
  def initialize prenom, nom
    @prenom = prenom
    @nom = nom
  end
end

et utilisez-le dans ‘index.rhtml’ :

fichier ‘index.rhtml’ :

<%
$DEBUG = true
Dir.chdir(File.dirname(__FILE__))
require "personne"
moi = Personne.new 'Xavier', 'Nayrac'
puts "Bonjour #{moi.prenom} #{moi.nom}"
%>

Utiliser un template

Les fichiers *.rhtml vont surtout vous servir de template. Le code Ruby entre <%= et %> est remplacé par son évaluation.

fichier ‘template.rhtml’ :

<html>
  <body>
    <h1>Présentation</h1>
    <p>
    Mon prénom  est : <%= @prenom %> </br>
    Mon nom de famille est : <%= nom %>
    </p>
  </body>
</html>

Pour savoir de quel objet vous voulez afficher l’attribut @prenom et la méthode nom, Ruby a besoin de
connaître le contexte d’utilisation. Modifiez la classe Personne comme suit :

fichier ‘personne.rb’ :

class Personne
  attr_reader :prenom, :nom
  def initialize prenom, nom
    @prenom = prenom
    @nom = nom
  end
  def getBinding
    binding
  end
end

Maintenant vous utilisez la classe ERB, de la librairie standard, pour afficher le template :

fichier ‘index.rhtml’ :

<%
$DEBUG = true
Dir.chdir(File.dirname(__FILE__))
require "personne"
require "erb"
moi = Personne.new 'Xavier', 'Nayrac'
template = ERB.new(IO.readlines("template.rhtml", nil)[0])
template.run(moi.getBinding)
%>

Lire une requète

Pour lire les requêtes, utilisez la classe CGI de la librairie standard :

fichier ‘requete.rhtml’ :

<%
$DEBUG = true
require "cgi"
cgi = CGI.new
if cgi.has_key?('id')
  puts "Argument id :"
  puts cgi['id']
else
  puts "Pas d'argument id"
end
%>

Pour vérifier le bon fonctionnement du programme ci-dessus, pointez votre navigateur sur
http://localhost/test/requete.rhtml?id=123

Conclusion

Voilà, pas besoin de Rails pour développer pour le web avec Ruby.
J’espère vous en avoir montré suffisamment et avoir été assez clair pour vous permettre de démarrer
votre projet…

Références

Les actions dans apache http://httpd.apache.org/docs/trunk/fr/mod/mod_actions.html

Directive DirectoryIndex http://httpd.apache.org/docs/current/mod/mod_dir.html

Documentation de Ruby http://www.ruby-doc.org/core/

Publicités

, , , , , , ,

  1. Poster un commentaire

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :