[[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
- Avoir activé les dépôts Universe
Installation standard
Installation de Ruby
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
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.
et pour Gutsy et précédentes ? toujours d'actualité ?
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.
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.
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
- Serveur RubyOnRails avec Mongrel, Mongrel Cluster, Apache 2.2, Subversion, Trac et Capistrano (Réalisé sous debian etch mais identique sous Ubuntu.
