ubuntu-fr

Communauté francophone des utilisateurs d'Ubuntu

[[rubyonrails]]

Piste: » rubyonrails


Ruby On Rails

Rails est un framework de développement d'applications web basé sur le concept Modèle-Vue-Controleur (MVC).

Ce dont vous aurez besoin

  • Ruby - Ruby 1.8.5 est la version recommandée pour l'utilisation de Rails. Ruby 1.8.4 et 1.8.2 conviennent aussi, mais pas la version 1.8.3.
  • RubyGems - RubyGems est le gestionnaire standard de paquets Ruby. Similaire à apt-get, mais est utilisé pour installer les librairies et applications en Ruby. Les Gems sont en quelque sorte comme les paquets .deb (les gems sont la meilleure façon d'installer Rails et ses dépendances)
  • Rails - Avec RubyGems installé, vous pouvez installer Rails et ses dépendances.

Pré-requis

Installation standard

Depuis Dapper, vous pouvez installer Rails depuis les dépôts, mais cette solution est connue pour causer des problèmes entre apt-get et le manager de paquets gem. Le mieux est d'installer Rails par le biais des gems.

Installation de Ruby


FIXME il semble manquer quelque chose….

Installez les paquets y rubygems

Sous hardy, installez les paquets ruby-full libyaml-ruby libzlib-ruby rubygems

Sous intrepid, il faut installer les paquets ruby-full libyaml-ruby libzlib-ruby rails, mais pas rubygem. Pour le récupérer, il faut télécharger l'archive de la dernière version sur ce site : http://rubyforge.org/frs/?group_id=126. Après avoir extrait l'archive, il faut rendre le fichier : "setup.rb" exécutable et le lancer avec ruby ( la commande peut être "ruby1.8", dans ce cas, vous pouvez faire un lien symbolique avec "ruby".

 sudo ruby1.8 ./setup.rb

Fil de discussion à ce sujet : http://forum.ubuntu-fr.org/viewtopic.php?id=288407

Mise à jour de RubyGems

Si vous êtes derrière un proxy, il faut d'abord mettre la variable d'environnement :

export HTTP_PROXY=http://url_du_proxy:port_HTTP

sudo gem update
sudo gem update --system

Installation de Rails et ses dépendances (avec RubyGems)

sudo gem install rails --include-dependencies

ou pour la version courte :

sudo gem install rails -y
Pas besoin d'option (–include-dependencies ou -y) sous Hardy car elles sont mises par défaut.
FIXME et pour Gutsy et précédentes ? toujours d'actualité ?
Si vous obtenez une erreur du type :

uninitialized constant Gem::GemRunner

Éditer le fichier /usr/bin/gem et ajoutez la ligne :

require 'rubygems/gem_runner'

juste avant la ligne :

require 'rubygems'

puis relancez la commande voulue.

Vous pouvez dès lors installer les « gems » dont vous avez besoin.

Suite à un gem update –system, vous pouvez rencontrer ce type d'erreur, simplement parce que /usr/bin/gem est différent de /usr/bin/gem1.8. J'ai résolu le problème simplement en supprimant /usr/bin/gem et en faisant un lien symbolique vers /usr/bin/gem1.8 :

sudo rm /usr/bin/gem
sudo ln -s /usr/bin/gem1.8 /usr/bin/gem

Créez votre première application Rails

Entrez la commande suivante :

rails /chemin/vers/la/nouvelle/application

Évidemment, remplacez /chemin/vers/la/nouvelle/application par le chemin vers lequel vous voulez stocker le code de votre application.
Par exemple ~/rails/maKillerApp

Installations supplémentaires

Rails est installé avec le serveur WebRick. Une fois votre application créée, vous pouvez la visualiser en vous plaçant dans le répertoire de l'application et en tapant :

script/server

Le serveur WebRick se lance alors et vous pouvez y accéder à l'adresse http://localhost:3000

Vous pouvez aussi installer et utiliser d'autres serveurs…

Mongrel

Pour installer mongrel, installez les paquets build-essential ruby1.8-dev, puis entrez la commande :

sudo gem install mongrel

Mongrel_cluster et apache 2.2

1 - installer mongrel :

sudo gem install gem_plugin mongrel mongrel_cluster --include-dependencies

2 - créer le fichier de configuration de mongrel_cluster :

sudo mongrel_rails cluster::configure -e production  -p 8000 -N 3 -c /var/www/monsite -C /var/www/monsite/config/mongrel_cluster.yml -a 127.0.0.1 --user www-data --group www-data

-e : indique le type d'environnement du serveur, ici production
-p : indique le port de la première instance du serveur mongrel, ici 8000
-N : indique le nombre d'instance à lancer, ici 3
-c : indique le chemin du site, ici /var/www/monsite
-C : indique où enregistrer le fichier de config que cette commande génère, ici /var/www/monsite/config
-a : indique à Rails découter l'interface du réseau local 127.0.0.1
–user : indique l'identité de l'utilisateur avec lequel démarrer les processus mongrel, ici www-data
–group : indique l'identité de le group avec lequel démarrer les processus mongrel, ici www-data

3 - créer un lien symbolique du fichier précédent vers /etc/mongrel_cluster :

sudo ln -s /var/www/monsite/config/mongrel_cluster.yml  /etc/mongrel_cluster/monsite.yml

NOTE : au point 2 on aurait pu enregistrer directement le fichier de configuration du cluster dans /etc/mongrel_cluster, ce qui aurait évité d'avoir à créer un lien symbolique, cela permet ici de garder la configuration du cluster dans le site lui-meme (au choix)

4 - lancer le cluster mongrel :

sudo mongrel_rails cluster::start -C /etc/mongrel_cluster/monsite.yml

5 - activer les modules apache correspondant :

sudo a2enmod rewrite
sudo a2enmod proxy
sudo a2enmod proxy_balancer
sudo a2enmod proxy_http

6 - configurer apache :

sudo gedit /etc/apache2/sites-available/monsite

et modifier le fichier comme suit

<VirtualHost *>
	ServerName monsite
	ServerAdmin admin@monsite.fr
	
	DocumentRoot /var/www/public
	<Directory /var/www/public/>
		Options FollowSymLinks
    		AllowOverride none
		Order allow,deny
		allow from all
	</Directory>

<Proxy balancer://mongrel_cluster>
	BalancerMember http://127.0.0.1:8000
	BalancerMember http://127.0.0.1:8001
	BalancerMember http://127.0.0.1:8002
</Proxy>

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} -f
RewriteRule (.*) $1 [L]

ProxyPass / Balancer://mongrel_cluster/
ProxyPassReverse / balancer://mongrel_cluster/

# Deflate
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/javascript text/css
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html


# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

ErrorLog /var/log/apache2/monsite.log
CustomLog /var/log/apache2/access.log combined
ServerSignature Off

</VirtualHost>

activer le serveur virtuel

sudo a2ensite monsite

7 - modifier le mode proxy d'apache par défaut :
par défaut le mode proxy est interdit à tout le monde, ce qui a pour effet que toute requete à apache se solde par "forbidden", il faut donner l'autorisation de consulter les pages à tout le monde

sudo gedit /etc/apache2/mods-available/proxy.conf

commenter les lignes qui interdisent la consultation et donner l'autorisation à tout le monde

              #Order deny,allow
              #Deny from all
              Order allow,deny
              Allow from all

8 - relancer apache

sudo /etc/init.d/apache2 restart

MySQL

Pour installer le gem mysql, installez le paquet libmysqlclient15-dev puis entrez la commande :

sudo gem install mysql

Postgres

Pour pouvoir utiliser postgres avec Rails, installez les paquets make (si cela n'est pas déjà fait) et libpq-dev puis entrez la commande :

sudo gem install postgres

Configuration avancée de Apache + FCGI

Il est aisé de tester Ruby on Rails avec le serveur intégré WEBrick ou mongrel, mais pour ceux qui veulent intégrer Ruby on Rails dans un environnement Apache, voici les instructions.

L'utilisation de fastcgi est fortement déconseillée et il convient maintenant d'utiliser apache 2.2 et son mode proxy_balancer couplé à des serveurs mongrel en cluster (cf supra)

Pré-requis

  • Avoir Ruby on Rails installé et fonctionnel
  • Votre application doit fonctionner en utilisant WEBrick ( /chemin/vers/l/application/script/server ).
    Cela signifie que vous avez toutes les librairies et gems correctement installées.
  • Avoir une installation d'Apache fonctionnelle. (voir lamp (Contentez vous d'installer Apache et MySQL) si ce n'est pas le cas).

Activez le mod_rewrite :

sudo a2enmod rewrite

Installez le support de FCGI pour Apache et Ruby en installant le paquet libapache2-mod-fcgid.
Après l'installation de mod_fcgid le module devrait être activé, sinon faites

sudo a2enmod fcgid

Vous pouvez installer libfcgi-ruby1.8 depuis les dépôts, mais le meilleur moyen est de le faire en utilisant rubygems de cette façon :

Installez d'abord les paquets build-essential ruby1.8-dev libfcgi-dev puis faites :

sudo gem install fcgi

Choix du mode de fonctionnement de l'application

Maintenant vous devez décider si votre application fonctionnera comme serveur virtuel de votre serveur web, ou si elle sera intégrée à la structure préexistante de votre serveur.

Serveur virtuel

Éditer un nouveau fichier /etc/apache2/sites-available/<nom du serveur> pour créer un hôte virtuel.

Le contenu du fichier devra être :

<VirtualHost *>
        SetEnv RAILS_ENV development
        ServerName www.monsite.com
        DocumentRoot /chemin/vers/l/application/public
        <Directory /chemin/vers/l/application/public/>
                Options ExecCGI FollowSymLinks
                AddHandler fcgid-script .fcgi
                Order allow,deny
                Allow from all
                RewriteEngine On
                RewriteRule ^$ index.html [QSA]
                RewriteRule ^([^.]+)$ $1.html [QSA]
                RewriteCond %{REQUEST_FILENAME} !-f
                RewriteRule ^(.*)$ /dispatch.fcgi?$1 [QSA,L]
                AllowOverride None
        </Directory>
        ServerSignature On
#       ErrorDocument 500 /500.html
        ErrorLog /var/log/apache2/www.monsite.com.error.log
        CustomLog /var/log/apache2/www.monsite.com.access.log combined
        LogLevel warn
</VirtualHost>

Bien sûr, remplacez les valeurs par celles qui correspondent à votre installation. Soyez sûrs de bien mentionner le chemin vers le répertoire public de votre application Rails ( /chemin/vers/l/application/public ).

Pour les fichiers d'accès et d'erreurs, créez un répertoire ou mettez les où vous voulez.

Si tout est configuré de cette manière vous pouvez vous passez du fichier .htaccess dans le répertoire public de votre application. Mais il n'est pas nécessaire d'y toucher ou de le supprimer.

Si c'est une installation locale et que vous ne prévoyez pas d'avoir une entrée DNS pour votre serveur virtuel, vous pouvez ajouter <nom du serveur> dans votre fichier /etc/hosts à la ligne commençant par 127.0.0.1 (en séparant de ce qui est déjà écrit par un espace ou une tabulation).

Maintenant il faut activer le serveur virtuel

sudo a2ensite <nom du serveur>

Puis redémarrez le serveur Apache

sudo /etc/init.d/apache2 restart

Tout devrait fonctionner normalement.

Si vous avez ajouté <nom du serveur> à /etc/hosts, n'oubliez pas que c'est un changement local et que vous devrez faire la même chose sur chaque machine utilisant l'application. sur les autres machines le nom du serveur virtuel devra être précédé de l'IP réelle du serveur et non de 127.0.0.1.

Problèmes

Cliquez sur le bouton « About your application's environment » de la page d'accueil de votre application et consultez ce qui suit pour connaître la source du problème.

Beaucoup de texte, commençant par **#!/usr/bin/ruby1.8**...

Le handler CGI/FCGI n'est pas configuré correctement.

Vérifiez que la configuration du serveur virtuel ne contient pas la directive AllowOverride none.

404

Les règles de réécriture n'ont pas d'effet.

Vérifiez que la configuration du serveur virtuel ne contient pas la directive AllowOverride none.

Application Error

Apache n'a pas les permissions correctes pour exécuter l'application.

Les répertoires log et tmp de votre application doivent être accessibles en écriture par le serveur Apache. Le meilleur moyen est de changer le propriétaire de ces répertoires en www-data. Les permissions devraient être lecture/écriture pour le propriétaire et lecture seule pour les autres (644) :

chgrp www-data -R /chemin/vers/l/application/log
chgrp www-data -R /chemin/vers/l/application/tmp
chmod 644 -R /chemin/vers/l/application/tmp
chmod 644 -R /chemin/vers/l/application/log

Répertoire en Alias sous la racine du serveur

Modifiez le fichier existant sous /etc/apache2/sites-available/. Insérez ce qui suit juste avant la balise </VirtualHost> dans le fichier :

    Alias /<alias> "<chemin_vers_le_répertoire _public_de _l_application>"
    <Directory <chemin_vers_le_répertoire _public_de _l_application>>
        Options +FollowSymlinks +ExecCGI
        Order allow,deny
        Allow from all
        AddHandler fcgid-script .fcgi
        RewriteEngine On
        RewriteBase /<alias>
        RewriteRule ^$ index.html [QSA]
        RewriteRule ^([^.]+)$ $1.html [QSA]
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
        ErrorDocument 500 /500.html
    </Directory>
  • <chemin_vers_le_répertoire _public_de_l_application> est explicite (donc si votre application se situe dans `/var/www-rails/app`, ça devra être `/var/www-rails/app/public`).
  • <alias> est le chemin relatif à la racine de votre serveur ou vous vous "situer" votre application (ie. `Alias /xxx/yyy` signifie que votre application sera accessible par l'url `http://<votre serveur web>/xxx/yyy`).

Aucune modification du fichier /etc/hosts n'est nécessaire.

Redémarrez votre serveur apache :

sudo /etc/init.d/apache2 restart

et essayez votre application.

Problèmes rencontrés

  • Après la commande
rake db:migrate

Si vous obtenez l'erreur suivante :

Please install the postgres adapter: `gem install activerecord-postgres-adapter` (no such file to load -- active_record/connection_adapters/postgres_adapter)

Il faut vérifier que vous avez bien postgresql dans votre fichier config/database.yml et non pas postgres. Pour palier à ce problème, utilisez la commande suivante lors de la création de votre projet :

rails mon_projet -d postgresql

Liens


rubyonrails.txt · Dernière modification: 2009/06/24 14:22 par 213.95.41.13
Le contenu de ce wiki est sous double licence : CC BY-SA et GNU FDL