From 4db0d7b7bbf34f9c0e7955c37ce36db7ad3852a1 Mon Sep 17 00:00:00 2001 From: Gregory Colpart Date: Sun, 12 Aug 2018 13:21:25 +0200 Subject: [PATCH] =?UTF-8?q?grosse=20relecture=20et=20=C3=A9volutions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HowtoRails.md | 560 ++++++++++++++++++++++---------------------------- 1 file changed, 248 insertions(+), 312 deletions(-) diff --git a/HowtoRails.md b/HowtoRails.md index dedfd916..c96d48d8 100644 --- a/HowtoRails.md +++ b/HowtoRails.md @@ -1,138 +1,268 @@ -**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.** +--- +categories: web +title: Howto Rails +... -# Howto Rails +* Documentation : +* YAML Cookbook for Ruby : +* Rôle Ansible : - +[Ruby On Rails](https://rubyonrails.org/) est un framework web libre écrit en Ruby appliquant le principe MVC (Modèle-Vue-Contrôleur). Nous l'utilisons notamment dans le logiciel [Chexpire](https://chexpire.org/). -Mettre en place un environnement de production "Ruby On Rails" exige de trouver les bons compromis -entre les composants système - stable et robuste par nature - et l'environnement de développement -"Ruby On Rails" très volatile et changeant. Voici comment nous mettons cela en oeuvre. +## Installation -## Cas 1 : utilisation avec Passenger +### Installation avec rbenv -* [Documentation de Passenger pour Apache](http://modrails.com/documentation/Users%20guide%20Apache.html) -* [Documentation de Ruby Enterprise Edition](http://www.rubyenterpriseedition.com/documentation.html) -* [Un howto pour Yaml](http://www.yaml.org/YAML_for_ruby.html) (en parallèle avec Ruby, mais simple à comprendre) +[rbenv](https://github.com/rbenv/rbenv) permet d'avoir un environnement compilé par utilisateur. +C'est donc le développeur qui gère sa version de Ruby, ses Gems, etc... on ne lui installe même pas Ruby ! -### Installation - -On installe d'abord Ruby 1.8 et ses dépendances utiles (`irb`, `rdoc`, `ri`, …). +> *Note* : vous devez mettre les droits `exec` sur la partition */home* pour cette installation ~~~ -# aptitude install ruby-full irb rubygems rails libactionpack-ruby1.8 libactionmailer-ruby1.8 -~~~ +# apt install rbenv build-essential libssl-dev libreadline-dev zlib1g-dev +# apt install liblzma-dev libmariadbclient-dev -Installer les bindings MySQL et OpenSSL (voir [#les-gems Les gems]) : +$ eval "$(rbenv init -)" +$ mkdir ~/.rbenv/plugins +$ git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build +$ rbenv install --list +$ TMPDIR=~/tmp rbenv install 2.5.1 +$ rbenv global 2.5.1 +$ gem install bundler rails +$ echo 'eval "$(rbenv init -)"' >> ~/.bashrc + +$ ruby -v +ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux] + +$ gem list + +*** LOCAL GEMS *** ~~~ -# aptitude install libmysql-ruby libopenssl-ruby libmysqlclient15-dev -~~~ +actioncable (5.2.1) +actionmailer (5.2.1) +actionpack (5.2.1) +actionview (5.2.1) +activejob (5.2.1) +activemodel (5.2.1) +activerecord (5.2.1) +activestorage (5.2.1) +activesupport (5.2.1) +arel (9.0.0) +bigdecimal (default: 1.3.4) +builder (3.2.3) +bundle (0.0.1) +bundler (1.16.3) +[…] +~~~~ -### Les gems #les-gems -Les gems sont des paquets contentant des librairies et/ou des applications écrites en Ruby. Elles sont énormément utilisées, notamment dans Rails. +### Installation avec ruby système -Par défaut, aucune librairie n'est installée sous forme de gem à part les bindings MySQL et Rack (qui est une dépendance de Passenger) -Il est préférable d'installer les bindings MySQL à la main (`libmysql-ruby`) car ils nécessitent la compilation d'extensions en C et -risquent d'être utilisés par tous les utilisateurs. - -OpenSSL fait normalement partie de la librairie standard Ruby, mais n'est pas inclus dans Debian. Rails en a besoin pour fonctionner, il convient -donc d'installer `libopenssl-ruby` manuellement. - -### Ruby Enterprise Edition (REE) - -REE est une version patchée de Ruby optimisée pour les applications Web et créée par les mêmes développeurs que Passenger. -REE est donc censé s'intégrer parfaitement avec Passenger. - -Des paquets (ubuntu) existent pour REE, mais le plus simple est de le compiler à la main. -Par défaut il s'installera dans le dossier `/opt`, en totale isolation du reste du système. -Rubygems est livré avec REE, et est placé dans le dossier de ce dernier. - -Il suffit de récupérer une [archive des sources sur le site de REE](http://rubyenterpriseedition.com), -de la décompresser et de lancer le script `./installer --no-dev-docs` en tant que root. Le reste de la procédure est indiqué -par l'installateur. - -À noter qu'il faut avoir installé les paquets `libreadline-dev`, `libz-dev`, `libssl-dev` et avoir une suite de -compilation fonctionnelle (gcc, g++, make, patch, …) - -### Utilisation avec Passenger - -Passenger est livré avec REE sous forme de gem, on peut donc l'installer juste après REE. Le mode d'installation est alors quelque peu différent : - -Avant tout on installe toutes les librairies nécessaires : celles de REE listées précédemment, plus les libs de développement d'Apache +Cela permet de bénéficier des mises à jour de sécurité de Ruby, tout en gérant les Gems par utilisateur. ~~~ -# aptitude install libreadline-dev libz-dev libssl-dev apache2-prefork-dev libcurl4-openssl-dev -~~~ +# apt install ruby ruby-dev rails +# apt install liblzma-dev libmariadbclient-dev -On installe ensuite REE selon la procédure définie ci-dessus, et une fois cette installation terminée, on lance la commande : +$ export PATH="$HOME/.gem/ruby/2.3.0/bin:$PATH" +$ gem install bundler +$ echo 'PATH="$HOME/.gem/ruby/2.3.0/bin:$PATH"' >> ~/.bashrc + +$ ruby -v +ruby 2.3.3p222 (2016-11-21) [x86_64-linux-gnu] + +$ gem list + +*** LOCAL GEMS *** + +actionmailer (4.2.7.1) +actionpack (4.2.7.1) +actionview (4.2.7.1) +activejob (4.2.7.1) +activemodel (4.2.7.1) +activerecord (4.2.7.1) +activesupport (4.2.7.1) +arel (6.0.3) +atomic (1.1.16) +bigdecimal (1.2.8) +binding_of_caller (0.7.2) +blankslate (3.1.3) +builder (3.2.2) +bundle (0.0.1) +bundler (1.16.3, 1.13.6) +[…] +~~~~ + + +## Utilisation + +### Démarrer un projet Rails + + ~~~ -/opt/ruby-enterprise-/bin/passenger-install-apache2-module +$ rails --version +Rails 4.2.7.1 + +$ rails new foo +$ cd foo ~~~ -L'installateur nous guide dans la procédure. Dans le cas ou le MPM d'Apache est ITK, il préviendra : +On peut alors ajuster la configuration (routes, base de données, etc.), coder son projet, le stocker dans un repository Git, etc. + +Pour voir en local le résultat : ~~~ -WARNING: Apache doesn't seem to be compiled with the 'prefork' or 'worker' MPM +$ cd foo +$ ./bin/rails server +=> Booting WEBrick +=> Rails 4.2.7.1 application starting in development on http://localhost:3000 +=> Run `rails server -h` for more startup options +=> Ctrl-C to shutdown server +[2018-08-12 11:43:15] INFO WEBrick 1.3.1 +[2018-08-12 11:43:15] INFO ruby 2.3.3 (2016-11-21) [x86_64-linux-gnu] +[2018-08-12 11:43:15] INFO WEBrick::HTTPServer#start: pid=12383 port=3000 ~~~ -On peut cependant continuer l'installation en ignorant l'avertissement. Une fois terminée, l'installateur donne la configuration pour Apache +On peut alors le visualiser sur -Dans `/etc/apache2/mods-available/passenger.load` on mettra la ligne : +### Les environnements de Rails + +Rails propose trois environnements d'exécution distincts·: `production`, `development` et `test`. + +Chacun a un but précis facilement devinable depuis son nom. + +Pour lancer dans un certain environnement les commandes qui agissent avec l'application (par exemple les +tâches [Rake](http://guides.rubyonrails.org/command_line.html#rake-is-ruby-make)), il suffit de définir la +variable d'environnement RAILS_ENV, par exemple·: ~~~ -LoadModule passenger_module /opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/passenger-3.0.0/ext/apache2/mod_passenger.so +$ RAILS_ENV=production rake db:migrate ~~~ -et dans `/etc/apache2/mods-available/passenger.conf` : +### Redémarrage optimisé + +Pour redémarrer une application Rails de façon optimisée, il suffit de créer ou de mettre à jour le timestamp du fichier +`tmp/restart.txt` (avec la commande `touch` par exemple). À la prochaîne requête, l'application sera redémarrée et tout l'environement chargé de nouveau. + +Pour que l'application redémarre à chaque requête on peut aussi créer un fichier `tmp/always_restart.txt` et le supprimer une fois qu'on ne souhaite plus ce comportement. + +### Unité systemd + +TODO, cf https://wiki.evolix.org/HowtoSystemd#systemd-par-utilisateur + +### Les Gems et Bundler + +Les [Gems](https://rubygems.org/) sont des paquets contentant des librairies et/ou des applications écrites en Ruby. +Elles sont souvent utilisées, notamment dans Rails. ~~~ - - PassengerRoot /opt/ruby-enterprise-/lib/ruby/gems/1.8/gems/passenger-3.0.0 - PassengerRuby /opt/ruby-enterprise-/bin/ruby +$ gem -v +2.5.2.1 - PassengerEnabled off - #RailsAutoDetect off - #RackAutoDetect off - PassengerFriendlyErrorPages off +$ gem list - +$ gem env +RubyGems Environment: + - RUBYGEMS VERSION: 2.5.2.1 + - RUBY VERSION: 2.3.3 (2016-11-21 patchlevel 222) [x86_64-linux-gnu] +[…] ~~~ -Puis : `a2enmod passenger` +Les Gems peuvent se trouver à plusieurs endroits : -Une fois REE installé il reste un dernier soucis, les binaires sont dans `/opt/ruby-enterprise-/bin`, -et pour que les utilisateurs puissent les utiliser il y a deux options possibles : +* installée par un paquet Debian (`/usr/lib/ruby/2.3.0/`) +* installée en temps que Gem système (`/var/lib/gems/2.3.0/`) +* installée en temps que Gem utilisateur (`~/.gem/ruby/2.3.0/`) -1. Rajouter ce chemin dans le PATH par défaut de tous les utilisateurs. -1. Créer des liens symboliques dans `/usr/bin`. - -Pour la deuxième solution, le script suivant permet d'automatiser la tâche : +Une application Rails contient un fichier `Gemfile` qui précise les Gems nécessaires et leurs versions : ~~~ -#!/bin/bash -cd /usr/bin -for i in `ls -1d /opt/ruby-enterprise-*/bin/*`; do - ln -s $i -done +source 'https://rubygems.org' + +# Bundle edge Rails instead: gem 'rails', github: 'rails/rails' +gem 'rails', '4.2.7.1' +# Use sqlite3 as the database for Active Record +gem 'sqlite3' +# Use SCSS for stylesheets +gem 'sass-rails', '~> 5.0' +# Use Uglifier as compressor for JavaScript assets +gem 'uglifier', '>= 1.3.0' +[…] ~~~ +[Bundler](https://bundler.io/) est l'outil de prédilection pour installer les Gems nécessaires. -### Configuration de Passenger/mod_rails +Avec la présence d'un fichier `Gemfile`, il suffit de lancer la commande : -Par défaut, Passenger est activé pour tous les sites d'Apache et propose une auto-détection des environnements Rails et Rack, -on commence par désactiver ce comportement dans `/etc/apache2/mods-available/passenger.conf` : +~~~ +$ bundle install +~~~ + +Un snapshot des Gems installées est aussi gardé dans un fichier `Gemfile.lock` permettant d'accélérer la résolution des dépendances. + +En général, on inclut les fichiers `Gemfile` et `Gemfile.lock` dans le repository du projet. + +### Capistrano + +[Capistrano](https://capistranorb.com/) est un outil de déploiement populaire, notamment pour les applications Rails. + +TODO + + +## Serveur web + +Pour une utilisation en production d'une application Rails, on peut utiliser plusieurs solutions : Puma, Unicorn, Passenger, etc. + +### Puma + +[Puma](http://puma.io/) est... + +TODO + +### Unicorn + +[Unicorn](https://bogomips.org/unicorn/) est... + +TODO + +### Passenger + +TODO : à tester / ajuster + +[Passenger](https://www.phusionpassenger.com/) est un serveur d'application qui propose des fonctionnalités avancées. + +On peut l'installer sous forme de Gem pour le développement : + +~~~ +$ gem install passenger + +$ passenger start +=============== Phusion Passenger Standalone web server started =============== +Environment: development +Accessible via: http://0.0.0.0:3000/ +You can stop Phusion Passenger Standalone by pressing Ctrl-C. +~~~ + +On peut l'installer pour [Apache](HowtoApache) ainsi : + +~~~ +# apt install libapache2-mod-passenger +~~~ + +Par défaut, Passenger est activé pour tous les sites d'Apache et propose une auto-détection des environnements Rails et Rack, on commence par désactiver ce comportement dans `/etc/apache2/mods-available/passenger.conf` ainsi que d'autres ajustements : ~~~ - PassengerRoot /usr - PassengerRuby /usr/bin/ruby1.8 + PassengerRoot /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini + PassengerDefaultRuby /usr/bin/ruby # On ajoute les lignes suivantes: PassengerEnabled off RailsAutoDetect off RackAutoDetect off + PassengerFriendlyErrorPages off PassengerTempDir /var/tmp/ PassengerUploadBufferDir /var/tmp @@ -142,279 +272,85 @@ on commence par désactiver ce comportement dans `/etc/apache2/mods-available/pa ~~~ -### Exemple de VirtualHost pour Rails +> *Note* : Passenger stocke tous ses fichiers temporaires dans le répertoire /tmp/ par défaut. Pour diverses raisons (de place, de droits voire de performance), il peut être intéressant d'en définir un autre. Cela ce fait via la directive Apache du module Passenger `PassengerTempDir`. + +Et voici un VirtualHost minimal pour Apache : ~~~ - - ServerName redmine.evolix.net + + ServerName foo.example.com PassengerEnabled on RailsAutoDetect on + #RailsEnv development - DocumentRoot /home/redmine/www/public - + DocumentRoot /home/foo/www/current + Allow from all Options -MultiViews - # Pour Apache 2 ITK - AssignUserID {user} {group} + # Pour Apache ITK + AssignUserID foo foo ~~~ -* [#apache-itk-users Information complémentaire sur Apache ITK] -* [Script de génération de VHost](http://forge.evolix.org/scm/viewvc.php/trunk/scripts/create_rails_vhost?view=markup&root=packweb) +> *Note* : Passenger détermine sous quel utilisateur il va lancer l'application en se basant sur le propriétaire du fichier `config/environment.rb` de l'application Rails. Pour Apache ITK, il faut donc y placer un propriétaire identique à celui utilisé dans `AssignUserID`. -### Trucs, astuces et détails +> *Note* : par défaut, Passenger fait tourner l'application en mode *production*. On peut forcer un certain environnement en ajustant la directive `RailsEnv` dans le VirtualHost. -#### Apache ITK #apache-itk-users -Passenger détermine sous quel utilisateur il va lancer l'application en se basant sur le propriétaire du fichier -`config/environment.rb` de l'application Rails. +## FAQ -Il faut donc y placer un propriétaire identique à celui utilisé dans AssignUserID +### GEM_HOME -#### Les environnements de Rails - -Rails propose trois environnements d'exécution distincts : `production`, `development` et `test`. - -Chacun a un but précis facilement devinable depuis son nom. - -Par défaut, Passenger fait tourner l'application en mode production. On peut forcer un certain environnement -en plaçant la directive `RailsEnv ` dans le fichier de configuration du VHost. - -Pour lancer dans un certain environnement les commandes qui agissent avec l'application (par exemple les -tâches [Rake](http://guides.rubyonrails.org/command_line.html#rake-is-ruby-make)), il suffit de définir la -variable d'environnement RAILS_ENV, par exemple : +On peut forcer l'environnement des Gems (pour ignorer `/var/lib/gems/2.3.0` par exemple) : ~~~ -$ RAILS_ENV=production rake db:migrate +$ export GEM_HOME=/$HOME/.gem/ruby/2.3.0 ~~~ -#### Redémarrage de l'application +### Ruby Enterprise Edition (REE) -Pour redémarrer une application Rails, il suffit de créer ou de mettre à jour le timestamp du fichier -`tmp/restart.txt` (avec la commande `touch` par exemple). À la prochaîne requête, l'application sera -redémarrée et tout l'environement chargé de nouveau. + -Pour que l'application redémarre à chaque requête on peut aussi créer un fichier `tmp/always_restart.txt` -et le supprimer une fois qu'on ne souhaite plus ce comportement. +[REE](http://rubyenterpriseedition.com/) est une version patchée de Ruby optimisée pour les applications Web et créée par les mêmes développeurs que Passenger. +On peut l'installer en le compilant à la main (par défaut il s'installera dans e dossier `/opt` en totale isolation du reste du système) +Il suffit de récupérer [les sources](http://rubyenterpriseedition.com/download.html), de la décompresser et de lancer le script `./installer --no-dev-docs` en tant que root. Le reste de la procédure est indiqué par l'installateur. +Les dépendances classiques de compilations seront nécessaires (`apt install build-essential libssl-dev libreadline-dev zlib1g-dev`). -#### `umask`s spéciaux - -Sur certains système, l'umask par défaut rend les fichiers installés par root non lisibles par le commun des utilisateurs. -Si celà est une bonne idée, combinée avec Rubygems et Apache ITK, celà devient moins évident, et il faut veiller -à `chmod`er correctement le dossier de Ruby pour que tous les utilisateurs puissent l'utiliser. - -Un exemple avec REE : +Si l'on utilise avec Passenger, on pourra forcer l'utilisation de REE ainsi : ~~~ -# chmod -R u=rwX,g=rX,o=rX /opt/ruby-enterprise-1.8.7-2010.02/ + + PassengerRoot /opt/ruby-enterprise-/lib/ruby/gems/1.8/gems/passenger-3.0.0 + PassengerRuby /opt/ruby-enterprise-/bin/ruby + ~~~ -#### Priorités de chargement +### Lister les Gems -Par défaut, même lorsque `rubygems` est activé, Ruby utilisera en priorité les librairies système -(celles installées par les paquets) plutôt que les gems. On peut cependant forcer l'utilisation d'une gem, -et même fixer la version désirée (sinon c'est la plus récente qui est automatiquement utilisée). - -Cette gestion des versions doit être faite par le développeur, qui peut installer les librairies qu'il souhaite indépendamment du système. -L'important est de savoir qu'il y a trois endroits ou on peut trouver une librairie Ruby : - -* Installée par un paquet (`/usr/lib/ruby/1.8/`) -* Installée en temps que gem système (`/var/lib/gems/1.8/`) -* Installée en temps que gem utilisateur (`~/.gem/ruby/1.8/`) - -#### Lister les gems - -Il n'existe pas de moyen de lister les gems installées uniquement sur le système, la commande `gem` cherche +Il n'existe pas de moyen de lister les Gems installées uniquement sur le système, la commande `gem` cherche à la fois dans le dossier `.gem` de l'utilisateur et le dossier système. La solution est d'utiliser un script -spécialisé qui fait cette recherche. +spécialisé qui fait cette recherche (un script `list_gems` doit traîner dans un coin…). -Le script est disponible dans le dépôt Subversion du Pack Web Evolix, dans -[trunk/scripts/list_gems](http://forge.evolix.org/scm/viewvc.php/trunk/scripts/list_gems?view=markup&root=packweb). - -#### Économiser un peu d'espace +### Économiser un peu d'espace Par défaut, `gem` installe la documentation aux formats RDoc (documentation html) et RI (documentation console) -pour les gems installées. Pour éviter celà, créer un fichier `.gemrc` dans la `$HOME` de l'utilisateur avec le +pour les Gems installées. Pour éviter celà, créer un fichier `.gemrc` dans la `$HOME` de l'utilisateur avec le contenu suivant : ~~~ gem: --no-rdoc --no-ri ~~~ -À mettre aussi dans la `$HOME` de `root` si c'est lui qui installe les gems. - -#### Rails 2.3.2->2.3.5 & Passenger & les logs - -Une petite erreur en environnement de production affecte les versions 2.3.2 à 2.3.5 (incluse) de Rails. Les logs -de l'application ne sont pas écrits dans le fichier `log/production.log`. Pour pallier cette erreur, il faut appliquer -le patch qu'on trouve [ici](https://rails.lighthouseapp.com/projects/8994/tickets/3577-failsafe-middleware-should-flush-the-logger) -(deuxième fichier). - -#### Répertoire temporaire de Passenger - -Passenger stocke tous ses fichiers temporaires dans le répertoire /tmp/ par défaut. Pour diverses raisons (de place, de droits voire de performance), il peut être intéressant d'en définir un autre. Cela ce fait via la directive Apache du module Passenger _PassengerTempDir_. Par exemple, nous mettons : - -~~~ -PassengerTempDir /var/tmp/ -~~~ - -### Mise à jour de Passenger - -Passenger est installé en tant que gem dans _/opt/ruby-enterprise-/lib/ruby/gems/1.8/gems/_. -Voici la procédure pour le mettre à jour : - -~~~ -gem update passenger -~~~ - -~~~ -/opt/ruby-enterprise-/lib/ruby/gems/1.8/gems/passenger-/bin/passenger-install-apache2-module - -~~~ -Puis modifier les chemins vers mod_passenger dans la conf d'Apache _/etc/apache2/mod-available/passenger_.{conf,load} pour pointer vers la nouvelle version (notamment les directives _LoadModule_ et _PassengerRoot_). -Enfin, redémarrer Apache pour prendre en compte le nouveau module. - -### Mise à jour de REE - -Pour mettre à jour REE, il suffit de recommencer la procédure d'installation, la nouvelle version sera installé dans /opt/ruby-enterprise- et ne perturbera donc pas la prod existante. - -Pour prendre en compte la nouvelle installation de REE, il faut modifier les chemins vers REE dans la configuration d'Apache. - -*Important :* pour la migration de REE 1.8.7-2010.02 vers 1.8.7-2011.01, il faut ajouter cette directive dans la configuration d'Apache : - -~~~ -RackBaseURI / -~~~ - -Et enlever les éventuelles directives `RailkBaseURI`. - - -## Cas 2 : utilisation avec rbenv + Unicorn - -*rbenv* permet d'avoir un environnement compilé par utilisateur. -C'est donc le développeur qui gère sa version de Ruby, ses Gems, etc... -on ne lui installe même pas Ruby ! - -Note préalable : mettre les droits _exec_ sur la partition /home - -~~~ -# aptitude install build-essential curl mg -~~~ - -~~~ -# aptitude install python-pygments zlib1g-dev libxml2-dev \ - libxslt1-dev libmysqlclient-dev libcurl4-openssl-dev \ - libmagickcore-dev libmagickwand-dev libreadline-dev imagemagick -~~~ - -~~~ -$ git clone git://github.com/sstephenson/rbenv.git .rbenv -$ git clone git://github.com/sstephenson/ruby-build.git .rbenv/plugins/ruby-build -$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile -$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile -$ . .bash_profile -$ rbenv install 1.9.2-p290 -$ rbenv global 1.9.2-p290 -~~~ - -Astuces diverses : +### rails_env ~~~ rails_env = `head -1 $(HOME}/www/current/config/database.yml | tr ':' ' '` ~~~ -### Debian 9 +### Rails 2.3.2->2.3.5 & Passenger & les logs -#### Utiliser une version spécifique de ruby avec rbenv - -*rbenv* permet d'avoir un environnement compilé par utilisateur. - -C'est donc le développeur qui gère sa version de Ruby, ses Gems, etc... on ne lui installe même pas Ruby ! - -Note préalable : mettre les droits _exec_ sur la partition /home - -~~~ -# apt install build-essential curl mg -# apt install python-pygments zlib1g-dev libxml2-dev \ - libxslt1-dev libmysqlclient-dev libcurl4-openssl-dev \ - libmagickcore-dev libmagickwand-dev libreadline-dev imagemagick -# apt install rbenv libssl-dev - -$ eval "$(rbenv init -)" -$ mkdir ~/.rbenv/plugins -$ git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build -$ rbenv install --list -$ TMPDIR=~/tmp rbenv install 2.5.1 -$ rbenv global 2.5.1 -$ gem install bundle - -$ ruby -v -ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux] -$ gem list -*** LOCAL GEMS *** - -bigdecimal (default: 1.3.4) -bundle (0.0.1) -bundler (1.16.3) -cmath (default: 1.0.0) -csv (default: 1.0.0) -date (default: 1.0.0) -did_you_mean (1.2.0) -etc (default: 1.0.0) -fcntl (default: 1.0.0) -fiddle (default: 1.0.0) -fileutils (default: 1.0.2) -io-console (default: 0.4.6) -ipaddr (default: 1.2.0) -json (default: 2.1.0) -minitest (5.10.3) -net-telnet (0.1.1) -openssl (default: 2.1.0) -power_assert (1.1.1) -psych (default: 3.0.2) -rake (12.3.0) -rdoc (default: 6.0.1) -scanf (default: 1.0.0) -sdbm (default: 1.0.0) -stringio (default: 0.0.1) -strscan (default: 1.0.0) -test-unit (3.2.7) -webrick (default: 1.4.2) -xmlrpc (0.3.0) -zlib (default: 1.0.0) -~~~ +Une petite erreur en environnement de production affecte les versions 2.3.2 à 2.3.5 (incluse) de Rails. Les logs de l'application ne sont pas écrits dans le fichier `log/production.log`. Pour pallier cette erreur, il faut appliquer le patch qu'on trouve [ici](https://rails.lighthouseapp.com/projects/8994/tickets/3577-failsafe-middleware-should-flush-the-logger) (deuxième fichier). -#### Utiliser ruby système (2.3) et Gem locales - -Cela permet de bénéficier des mises à jour de sécurité de ruby (mais pas des gems). - -~~~ -# apt install ruby ruby-dev - -$ export GEM_HOME=/$HOME/.gem/ruby/2.3.0 -$ export PATH="$HOME/.gem/ruby/2.3.0/bin:$PATH" -$ gem install bundle - -$ ruby -v -ruby 2.3.3p222 (2016-11-21) [x86_64-linux-gnu] -$ gem list - -*** LOCAL GEMS *** - -bigdecimal (1.2.8) -bundle (0.0.1) -bundler (1.16.3) -did_you_mean (1.0.0) -io-console (0.4.5) -json (1.8.3) -minitest (5.9.0) -net-telnet (0.1.1) -power_assert (0.2.7) -psych (2.1.0) -rake (10.5.0) -rdoc (4.2.1) -test-unit (3.1.7) -~~~ \ No newline at end of file