Sortie de Ruby on Rails 4.0

Posté par  . Édité par Thomas J., Nÿco, palm123, Benoît Sibaud, claudex, Nicolas Casanova, Florent Zara et Xavier Teyssier. Modéré par claudex. Licence CC By‑SA.
Étiquettes :
26
4
juil.
2013
Ruby

Ruby on Rails est sorti le 25 juin 2013 en version 4.0. Tous les détails dans la seconde partie de cette dépêche !

Sommaire

Ruby On Rails ?

Ruby on Rails, ou RoR de son petit nom, est un framework web MVC écrit en Ruby.

Créé en 2004 par David Heinemeier Hansson, la version 1.0 sort fin 2005 et enflamme le monde du développement web.

Pour les étourdis, voici un historique récent du projet :

  • 29 août 2010 : Rails 3.0.0
  • 31 août 2011 : Rails 3.1.0
  • 20 janvier 2012 : Rails 3.2.0
  • 25 février 2013 : Rails 4.0 beta 1
  • 1er mai 2013 : Rails 4.0 RC 1
  • 11 juin 2013 : Rails 4.0 RC 2
  • 25 juin 2013 : Rails 4.0

Une communauté toujours plus active

Pour cette version 4.0, il y a eu plus de 10000 commits !
Le projet a également compté jusqu’à plus de 500 contributeurs différents pour l'année 2013.

Les nouveautés de Rails 4.0

Une grande attention a été portée à rendre RoR le plus simple possible pour construire des applications web modernes et rapides. La majeure partie de ce travail a été réalisé dans le cadre de l'application basecamp (en) sur ces trois aspects :

  1. Rendre l'utilisation du « Russian Doll-caching » plus facile à travers un mécanisme d'expiration par clef voir cet article de 37signals (en).
  2. Rendre la partie cliente plus rapide avec la gem turbolinks (en) qui permet de ne pas recompiler le JS et les CSS entre les pages sans trop alourdir le développement de l'application.
  3. Avoir une meilleure gestion des etags dans les contrôleurs.

Le code est maintenant entièrement « thread safe », permettant de meilleures performances sur les serveurs multi-threads.

Ajout de la possibilité d'envoyer des flux de données à intervalle choisi, voir cet article (en) pour plus d'explications.

Beaucoup d'améliorations sur le module Active Record, notamment sur la cohérence de la structure des requêtes et des « scope ».

Il y a également eu des améliorations sur la sécurité, dont entre autres l'ajout d'un contrôle de l’affectation de masse dans les contrôleurs en permettant de lister les paramètres à accepter ou à refuser. Certains se souviendront peut être que GitHub a fait les frais d'une attaque de ce type en mars 2012.

Ruby

Ruby 2.0 est maintenant recommandé.
La version 1.8 n'est plus supportée et la branche 1.9 ne le sera plus à partir de rails 5.
Il est donc conseillé de migrer dès que possible vers la version 2.0 !

Nettoyage de code obsolète

Certaines fonctionnalités ont été déplacées dans des gems indépendantes :

  • Active Resource : mapping relationnel-objet pour des webservices REST.
  • Active Record Observers : classes permettant l'usage du pattern observateur.
  • Action Pack page : mise en cache du HTML des pages.
  • action caching : mise en cache du HTML des pages mais les requêtes arrivent toujours à la couche "Action Pack", permettant l'usage des filtres.

Changelogs

Pour plus de détails, voici les ChangeLogs complets pour chaque module:

Installation de RoR

Installer ruby avec rbenv (recommandé)

Le plus simple est d'utiliser rbenv-installer qui nécessite d'avoir git et curl sur sa machine :

curl https://raw.github.com/fesplugas/rbenv-installer/master/bin/rbenv-installer | bash

À noter que les ubunteros auront droits à une étape supplémentaire.

Pour installer la dernière version de ruby, il suffit de lancer :

rbenv install 2.0.0-p247

Puis, pour utiliser cette version par défaut :

rbenv global 2.0.0-p247

N'oubliez pas d'installer l'indispensable bundler :

gem install bundler

et de signifier à rbenv qu'un nouvel exécutable est maintenant disponible :

rbenv rehash

Installer ruby avec RVM

Ruby Version Manager permet d'installer puis gérer différentes versions de ruby.

Installation de RVM (je passe les détails):

curl -L https://get.rvm.io | bash -s stable

Note: RVM s'occupe maintenant d'installer les dépendances pour la compilation de ruby (ex. pour debian: libssl-dev, zlib1g-dev, …), ce qui n'était pas le cas auparavant et pouvait bloquer un débutant.

Installation de ruby 2.0.0 avec RVM:

rvm install 2.0.0
# Aller boire un café/thé/verre d'eau à ce moment-là

À ce stade vous pouvez tester l'installation avec un ruby -v ou bien

echo 'p "Hello world!"'|ruby

L'installation de ruby installe également l'outil gem, qui est un gestionnaire de paquet pour ruby. Cet outil va nous permettre d'installer rails et ses dépendances.

Installation de Ruby On Rails

gem install rails

Pour les utilisateurs de rbenv , n'oubliez pas de lancer un petit rbenv rehash

Création d'un projet:

rails new linuxfr_v3

Lancement du serveur rails:

cd linuxfr_v3
bundle exec rails s

Note: en cas d'erreur avec le runtime Javascript, il faut:
Activer la gem therubyracer dans le fichier Gemfile

sed -i "s/# gem 'therubyracer'/gem 'therubyracer'/" Gemfile

Puis installer la gem avec la commande bundle (outil qui permet d'installer toutes les dépendances du projet):

bundle

Ding, c'est prêt. Il ne vous reste plus qu'à vous lancer dans la création de votre projet rails et bien sur de prévoir quelques heures à lire la documentation, en commençant par ici, par ou pas loin d'un cimetière.

Aller plus loin

  • # Initiation à Ruby On Rails

    Posté par  (site web personnel) . Évalué à 3.

    Dommage tout de même qu'il manque ce qui devait être une des "killer feature " de Rails 4, à savoir la gestion intégrée des files d'attentes de processus asynchrones.
    Cela dit, les gems comme Sidekiq font très bien le boulot en attendant… :-)

    Pour se mettre à Ruby On Rails, en plus des excellentes ressources citées en fin d'article on peut également se référer à ce blog en français, qui détaille l'apprentissage de RoR pour un développeur PHP :

    ridinginrails.tumblr.com

  • # rbenv et rvm

    Posté par  . Évalué à 2.

    Petite précision pour l'utilisation de rbenv / rvm (avec une préférence personnelle pour le premier) est qu'il faut avoir d'installer un compilateur C car contrairement à une installation packagée binaire classique, dans les deux cas on passe par la case "compilation".

    Et pour ceux qui trouveraient RoR un poil trop "lourd", il y un framework très sympa appelé Sinatra.

    • [^] # Re: rbenv et rvm

      Posté par  . Évalué à 1.

      De toute façon, certains gems requis de base (genre therubyracer) demandent aussi un compilateur C, on n'y échappe pas. :)

    • [^] # Re: rbenv et rvm

      Posté par  . Évalué à 3.

      A savoir que rbenv est packagé dans debian depuis wheezy, ce qui est un gros plus par rapport à RVM, car faire de l’exécution d'un script shell provenant d'internet c'est un peu moyen pour la sécurité !

      • [^] # Re: rbenv et rvm

        Posté par  . Évalué à 4.

        Outch, rbenv 0.3.0.

        Par contre, je suis assez perplexe en terme de sécurité avec ça car la CVE-2013-2065 et la CVE-2013-4073 ne sont pas corrigées.

        Alors de la à dire que c'est "mieux" parce que ça vient des dépôts officiels Debian, je suis quelque peu dubitatif pour le moment. Pour le moment, je préfère nettement faire des déploiements avec des sources sur GitHub (que l'on peut facilement vérifier) via rbenv et autres que mon baser aveuglement sur des paquets binaires.

        PS: et on a le droit de trouver ça nul, je ne force personne =)

        • [^] # Re: rbenv et rvm

          Posté par  . Évalué à 4.

          Effectivement la situation n'est pas terrible, mais pour ce cas précis rbenv permet justement d'installer facilement la dernière version ouf :)

          En dehors de problèmes de temps de mis à jour sur des failles comme tu le pointes, je trouve plus facile de faire confiance à l'infrastructure et aux process Debian qu'à un compte github ou un site tiers.

  • # Installation

    Posté par  . Évalué à 3.

    Merci de cette dépêche.

    Etant débutant dans le monde de ROR, je tatillonne avec l'installation. Je n'ai pas encore trouvé une procédure qui se déroule sans une erreur (Machine avec Linux #!):
    - Installation de RVM, une ligne de commande, et paf! message d'erreure -> je fouille, je trouve, je corrige, je réessaye, ça marche.
    - Installation de Rails, Paf! erreur…
    - Démarrage du serveur -> Paf! manque node.js.
    - Installation de node.js, paf! erreur de compilation.
    - Le lendemain, je veux continuer et paf! manque les chemins dans le PATH

    Je trouve parfois qu'il faut faire de la haute voltige pour arriver à quelque chose de fonctionnel. Mais une fois que c'est fait, c'est que du bonheur. :-)

    Pour ceux que ça intéresse.
    Pour m'initier à Ruby, j'ai suivi le tutoriel (version française) de Michael Hartle ainsi que le livre en anglais de o'Reilly

    Bon et maintenant paf! je sors []

    • [^] # Re: Installation

      Posté par  . Évalué à 5.

      Je ne saurais que trop te conseiller de passer à rbenv à la place de RVM. Je n'aime pas trop la façon de fonctionner de RVM et des bidouilles à la sauce 'cd' même si certains vont te dire que rbenv n'a pas un support des gemsets. Oui mais comme pour cela, il y Bundler qui s'impose pas mal (moi j'aime beaucoup aussi), on peut donc facilement s'en passer (je m'en passe avec Sinatra).

      Une piste au cas où : http://rakeroutes.com/blog/how-to-use-bundler-instead-of-rvm-gemsets/

      • [^] # Re: Installation

        Posté par  . Évalué à 1.

        Merci de ton conseil.

        RVM, c'est plus facile à désinstaller (rvm implode) qu'à installer. rbenv est maintenant actif sur ma machine virtuelle #!.

        Je remarque qu'il me faut beaucoup de temps pour saisir toute la constellation de Ruby. Si on compte :
        - Les gestionnaires d'environnement (rbenv,rvm)
        - Les versions de ruby et de rails et leur compatibilité respective
        - Les gems de toutes les couleurs pour ajouter rapidement les fonctionnalités (autorisation, authentification, base de donnée et plein d'autres…)
        - Le bundler pour pouvoir gérer les différents version correctement
        - Les serveurs applicatifs (brick pour le dev, unicorne, etc…)

        ça fait une bonne dose de matière à absorber, de sites et de doc à consulter pour pouvoir arriver à une application web fonctionnelle et publiable (j'en suis pas encore là d'ailleur). Attention, je ne juge pas que c'est mauvais, je trouve que c'est un état de fait à prendre en compte lorsque je m'attaque à ROR.

  • # LinuxFR

    Posté par  . Évalué à -10.

    Merci, la réputation de RoR n'est plus à faire.
    J'ai juste une question pour ceux qui connaîtraient: est-ce que LinuxFr est basé sur RoR ?
    (Je sais qu'il est basé sur Ruby)

  • # Déçu

    Posté par  . Évalué à 2.

    Suite à cette annonce, moi et un ami avons décidé de faire un petit projet en RoR et donc d'installer RoR à travers RVM.

    L'installation fut longue et angoissante, RVM et gem passent de longs moments en n'affichant rien quant à leur activité. Après un long moment de compilation, ruby et rails étaient installés. Nous avons donc essayé de lancer le serveur de développement du framework seulement pour nous apercevoir que rails dépend de nodejs. Quel intérêt d'installer RoR plutôt que directement nodejs et Meteor dans ce cas…

    De plus, administrant plusieurs serveurs de production, cette expérience m'a rendu plutôt sceptique au sujet de la maintenabilité de logiciels en RoR sur un environnement de production. En effet, les mises à jour doivent être assurées manuellement via RVM et gem, et cela nécessite compilation et installation d'outils de développement qui serait inutiles avec bien d'autres langages/frameworks.

    Bref, plutôt déçu…

    • [^] # Re: Déçu

      Posté par  . Évalué à 2.

      Nous avons donc essayé de lancer le serveur de développement du framework seulement pour nous apercevoir que rails dépend de nodejs

      node.js n'est pas imposé.

      You will need an ExecJS supported runtime in order to use uglifier. If you are using Mac OS X or Windows you have a JavaScript runtime installed in your operating system. Check the ExecJS documentation for information on all of the supported JavaScript runtimes.

      Actuellement, j'écris une applications Rails, et j'ai choisi therubyracer

      "Quand certains râlent contre systemd, d'autres s'attaquent aux vrais problèmes." (merci Sinma !)

    • [^] # Re: Déçu

      Posté par  . Évalué à 2.

      En fait, déjà RVM c'est pour beaucoup de monde maintenant, un mauvais choix, rbenv étant nnnneeettemeent plus propre dans son fonctionnement. Ensuite, les déploiements sont souvent gérés par capistrano de nos jours.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.