Table des matières

, , ,

Attention BROUILLON ! Certaines parties de cette page sont obsolètes, pour une installation sur Karmic, voir directement la section Installation complète (Karmic Koala).

Pour l'installation de Ruby 1.9.2 et de Ruby On Rails 3.0, voir directement la section Installation complète (Maverick Meerkat)

L'installation de RVM devrait se faire pour un utilisateur uniquement et donc sans sudo devant, comme expliqué dans la doc officielle. Il est déjà dangereux de télécharger et installer un bash en une seule commande, le faire avec un sudo devant est juste une pratique à bannir. Merci de compléter et de mettre les avertissements nécessaires. — YoBoY - Administrateur de la Documentation Francophone

Ruby On Rails

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

Installation complète de Ruby 1.9.3 et Rails 3.0 via RVM (Maverick Meerkat)

Ruby On Rails 3.0 ne supporte pas Ruby 1.9.1

Si vous souhaitez installer Ruby 1.9.3 et Rails 3.0, vous ne pouvez pas le faire via les dépôts officiels. Il va donc vous falloir les installer à la main.

Ruby enVironment (Version) Manager (RVM)

RVM vous permet de gérer manuellement les versions de Ruby.

Pré-requis

Installer les dépendances :

sudo apt-get install curl git-core build-essential zlib1g-dev libssl-dev libreadline6-dev gem libyaml-dev

Installation

La commande suivante récupère et installe RVM :

bash < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)

Ou celle ci qui suis un redirecteur

curl -L get.rvm.io | bash -s stable

Le « sudo » est à proscrire en dehors d'une installation multi-utilisateurs (serveur). Pour plus d'informations sur cette commande, rendez-vous sur la page officielle de RVM (en anglais). Il existe d'autres méthodes pour installer RVM, mais que celles-ci nécessitent des modifications plus complexes de votre système.

Les binaires sont installés dans $HOME/.rvm, la fonction suivante permet de les rendre accessibles via le terminal :

echo '[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function' >> ~/.bashrc

Pour actualiser la configuration, fermer et rouvrir le terminal ou exécuter :

source ~/.bashrc

En single-user (sans sudo), l'installation de RVM est terminée : passez directement à Installation de Ruby.

Finalisation multi-utilisateur (avec sudo)

Inutile si l'on s'est contenté d'une installation single-user (sans sudo).

Une fois l'installation terminée, il faut ajouter votre compte dans le groupe rvm :

sudo adduser <utilisateur> rvm

Test

Pour vérifier l'installation, exécutez :

rvm info

Si vous obtenez :

Commande 'rvm' non trouvée

Vérifiez s'il n'est pas écrit :

Installation of RVM to /usr/local/rvm/ is complete.

Si c'est le cas, vous pouvez corriger comme cela :

ln -s /usr/local/rvm/bin/rvm /usr/bin/

Installation de Ruby 1.9.2

Installation

Tapez la commande suivante :

sudo rvm install 1.9.2

Une fois le téléchargement fini, l'installation débute toute seule et peut durer un certain temps, soyez donc patient !

Avec la commande ci-dessus, si vous obtenez cette erreur :

sudo: rvm: command not found

Il faut executer la commande :

rvm list known

Et choisir la version de ruby que vous souhaitez installer, en l'occurence ici :

rvm  install ruby-1.9.2-p180

Pour plus d'informations pour l'installation de Ruby avec RVM, vous pouvez vous rendre ici : https://rvm.beginrescueend.com/rubies/installing/

Sous Ubuntu 11.10 et RVM 1.10.0 (installation single-user)

Une erreur survient pendant la compilation de Ruby :

gcc -I. -I../../.ext/include/x86_64-linux -I../.././include -I../.././ext/openssl -DRUBY_EXTCONF_H=\"extconf.h\"    -fPIC -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wpointer-arith -Wwrite-strings -Wno-missing-field-initializers -Wno-long-long  -fPIC  -o ossl_ssl.o -c ossl_ssl.c
ossl_ssl.c:110:1: erreur: ‘SSLv2_method’ undeclared here (not in a function)
ossl_ssl.c:111:1: erreur: ‘SSLv2_server_method’ undeclared here (not in a function)
ossl_ssl.c:112:1: erreur: ‘SSLv2_client_method’ undeclared here (not in a function)
make[1]: *** [ossl_ssl.o] Erreur 1
make[1]: quittant le répertoire « /home/<user>/.rvm/src/ruby-1.9.2-p180/ext/openssl »
make: *** [mkmain.sh] Erreur 1

La solution

inspirée de cette page http://29a.ch/2011/10/28/rvm-on-ubuntu-11-10 (en anglais)

Faire le ménage :

rvm remove 1.9.2

Installer le paquet openssl de RVM :

rvm pkg install openssl

Forcer l'installation de Ruby avec le paquet openssl précédemment installé :

rvm install 1.9.2 --with-openssl-dir=$rvm_path/usr

Version par défaut

Il vous faut indiquer la version de Ruby utilisée par défaut :

sudo rvm --default ruby-1.9.2

Rendre Ruby accessible dans le shell

La partie qui suit est très importante (uniquement dans le cas d'une installation multi-utilisateur) !

Avec votre éditeur de texte préféré, éditez le fichier situé /home/<user>/.bashrc puis faites les actions suivantes :

  1. Commentez la ligne :
    [ -z "$PS1" ] && return

    en mettant un # devant

  2. Ajoutez à la place :
    if [[ -n "$PS1" ]]; then
  3. Ajoutez une nouvelle ligne, indentez d'un “cran” de plus et mettez
    [[ -s "$HOME/.rvm/src/rvm/scripts/rvm" ]] && . "$HOME/.rvm/src/rvm/scripts/rvm"  # This loads RVM into a shell session.
  4. Ajoutez une nouvelle ligne et mettez
    fi

Enregistrez le fichier, fermez les éventuels terminaux ouverts et ouvrez-en un nouveau. Pour tester si la modification a fonctionné, tapez :

ruby -v

Il doit vous afficher quelque chose de semblable à :

ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-linux]

Vous devrez effectuer la manipulation d'ajout dans le groupe rvm ainsi que de modification du fichier .bashrc pour chaque utilisateur devant avoir accès à rvm et ruby

Comme pour rvm, si vous obtenez le message suivant :

Le programme « ruby » n'est pas installé.  Vous pouvez l'installer en saisissant :
apt-get install ruby

Exécutez la commande suivante :

sudo ln -s /usr/local/rvm/bin/ruby /usr/bin

Installation de Rails 3.0

Installation

Installez Rails 3.0 :

sudo gem install rails

Le système va se charger d'installer Rails ainsi que ses dépendances. Votre terminal peut ne pas afficher d'information durant un laps de temps, ne vous inquiétez pas et soyez une fois de plus patient.

(Optionnel) Vous pouvez en profiter pour installer le gem mysql (remplacez simplement “rails” par “mysql”)

Test

Vous pouvez maintenant accéder à Rails. Pour tester si tout s'est bien passé, tapez la ligne suivante dans un terminal (il faut fermer le terminal en cours et en ouvrir un autre). Elle aura pour effet de créer un nouveau projet Rails au chemin indiqué.

rails new /chemin/du/projet/nomDuProjet -d mysql

-d mysql signifie que je vais utiliser une connexion à MySQL. Cette option est totalement optionnelle.

Vous devez avoir une liste de fichiers créés qui doit s'afficher, semblable à celle-ci :

create  
      create  README
      create  Rakefile
      create  config.ru
      create  .gitignore
      create  Gemfile
      create  app
      create  app/helpers/application_helper.rb
      create  app/controllers/application_controller.rb
      create  app/views/layouts/application.html.erb
...

Votre installation est terminée. Vous pouvez utiliser Ruby et Rails de façon classique.

Intégration avec Apache 2

Rails 3.0 pose quelques soucis avec Mongrel. Par contre, l'utilisation de passenger à la place se veut très simple et efficace : http://www.nicosphere.net/configuration-dapache-avec-passenger-pour-rails-2215

Installation complète (Karmic Koala)

Un gem c'est un peu comme un paquet deb.
La version 1.9 de Ruby correspond à la version de test.

Pour installer Ruby et le framework Ruby on Rails, il faut installer les paquets ruby, ruby-dev et libopenssl-ruby :

sudo apt-get install ruby ruby-dev libopenssl-ruby
Ruby On Rails en un clic Installer en 1 clic.

La version de RubyGems située dans les dépôts est trop ancienne pour installer le gem rails. Installons RubyGems manuellement :

wget http://production.cf.rubygems.org/rubygems/rubygems-1.3.7.tgz
tar -xvf rubygems-1.3.7.tgz
sudo ruby rubygems-1.3.7/setup.rb
sudo ln -s /usr/bin/gem1.8 /usr/bin/gem

Mettez éventuellement RubyGems à jour :

sudo gem update --system

Ensuite il faut mettre la ligne suivante dans ~/.gemrc pour indiquer le chemin où installer les binaires et désactiver l'installation des docs qui sont longues à installer :

gem: --bindir /usr/local/bin --no-ri --no-rdoc

Puis installer la gem rails :

sudo gem install rails

Pour pouvoir interfacer Ruby avec MySQL, il faut installer le paquet libmysqlclient-dev :

sudo apt-get install libmysqlclient-dev
Installation du gem mysqlInstaller le paquet.

Ainsi que le gem mysql :

sudo gem install mysql

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

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 new /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 :

rails 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'instances à 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-même (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 :

[[:tutoriel:comment_modifier_un_fichier|Éditez le fichier]] /etc/apache2/sites-available/default et modifiez la première ligne
NameVirtualHost *
<VirtualHost *>

puis

[[:tutoriel:comment_modifier_un_fichier|Éditez le fichier]] /etc/apache2/sites-available/monsite et modifiez 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 requête à Apache se solde par “forbidden”, il faut donner l'autorisation de consulter les pages à tout le monde

[[:tutoriel:comment_modifier_un_fichier|Éditez le fichier]] /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

En cas de “mongrel_rails: command not found” ⇒ créer un lien symbolique de /var/lib/gems/1.8/bin/mongrel_rails vers /usr/bin

MySQL

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

sudo gem install mysql2 -v 0.2.7

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

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>

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

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 pallier à ce problème, utilisez la commande suivante lors de la création de votre projet :

rails mon_projet -d postgresql

Si vous obtenez l'erreur suivante :

Could not find gem 'sqlite3 (>= 0)' in any of the gem sources listed in your Gemfile.

Il faut saisir ça dans un terminal :

  sudo apt-get install libsqlite3-dev
  bundle install

Liens


tiré de https://help.ubuntu.com/community/RubyOnRails