Pour l'installation de Ruby 1.9.2 et de Ruby On Rails 3.0, voir directement la section Installation complète (Maverick Meerkat)
Rails est un framework de développement d'applications web basé sur le concept Modèle-Vue-Controleur (MVC).
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.
RVM vous permet de gérer manuellement les versions de Ruby.
Installer les dépendances :
sudo apt-get install curl git-core build-essential zlib1g-dev libssl-dev libreadline6-dev gem libyaml-dev
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
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.
sudo adduser <utilisateur> rvm
Pour vérifier l'installation, exécutez :
rvm info
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/
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/
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
Il vous faut indiquer la version de Ruby utilisée par défaut :
sudo rvm --default ruby-1.9.2
Avec votre éditeur de texte préféré, éditez le fichier situé /home/<user>/.bashrc puis faites les actions suivantes :
[ -z "$PS1" ] && return
en mettant un # devant
if [[ -n "$PS1" ]]; then
[[ -s "$HOME/.rvm/src/rvm/scripts/rvm" ]] && . "$HOME/.rvm/src/rvm/scripts/rvm" # This loads RVM into a shell session.
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]
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
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.
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
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.
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
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 |
---|
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 mysql |
---|
Ainsi que le gem mysql :
sudo gem install mysql
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
export HTTP_PROXY=http://url_du_proxy:port_HTTP
sudo gem update sudo gem update --system
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
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
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…
Pour installer mongrel, installez les paquets build-essential ruby1.8-dev, puis entrez la commande :
sudo gem install mongrel
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
Pour installer le gem mysql, installez le paquet libmysqlclient16-dev puis entrez la commande :
sudo gem install mysql2 -v 0.2.7
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
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.
/chemin/vers/l/application/script/server
).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
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.
É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.
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.
Le handler CGI/FCGI n'est pas configuré correctement.
Vérifiez que la configuration du serveur virtuel ne contient pas la directive AllowOverride none
.
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
.
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
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.
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