URL: https://linuxfr.org/news/sortie-de-ruby-on-rails-7-0 Title: Sortie de Ruby on Rails 7.0 Authors: Thomas J. Benoît Sibaud et palm123 Date: 2021-12-23T12:07:31+01:00 License: CC By-SA Tags: ruby_on_rails, rails, ruby, framework et cadriciel Score: 7 La version 7.0 du cadriciel Ruby on Rails a fait son apparition le 15 décembre 2021. Pour rappel, Rails est un framework web complet développé en Ruby qui encourage la lisibilité du code, tout en privilégiant les conventions à la configuration. Il fait la part belle à l'architecture [Modèle-Vue-Contrôleur (MVC)](https://fr.wikipedia.org/wiki/Mod%C3%A8le-vue-contr%C3%B4leur) et s’appuie sur un certain nombre de sous-ensembles : - **Active Model** qui permet de créer des objets Ruby suivant un [mapping objet-relationnel (ORM)](https://fr.wikipedia.org/wiki/Mapping_objet-relationnel) - **Action View** qui est responsable de la génération des pages HTML - **Action Controller** qui gère le cycle de vie des requêtes de l'application (cela inclut les sessions, les filtres, les cookies, le streaming de données et le traitement des exceptions) - **Action Pack** qui traite les requêtes web tout en fournissant la couche de contrôle MVC - **Active Record** qui permet aux modèles d'interagir avec la base de données de l'application - **Action Cable** qui permet d'écrire des fonctionnalités temps réel grâce au protocole WebSocket - **Action Mailbox** qui permet de recevoir des mails dans une application - **Action Mailer** qui permet d'envoyer des mails depuis une application - **Action Text** qui fournit tout qu'il faut pour gérer du contenu incluant du texte enrichi - **Active Job** qui permet d'exécuter des travaux en arrière-plan selon différentes approches de mise en file d'attente - **Active Storage** qui facilite le téléversement de fichiers vers un service de stockage dans les nuages, la transformation et l'extraction de métadonnées - **Active Support** qui fournit un certain nombre d'extensions au langage Ruby Vous avez forcement croisé un site utilisant ce cadriciel : GitHub, Twitch, Airbnb, Kickstarter ou encore LinuxFr.org ! ---- [Site web](https://rubyonrails.org/) [Guide](https://guides.rubyonrails.org/) [Construire et déployer un blog en 34 minutes](https://d1snj8sshb5u7m.cloudfront.net/Rails7.mp4) [Code source de ce blog](https://github.com/tjustino/rails7_demo) ---- Une toute nouvelle approche du JavaScript ========================================= Allant à l'encontre de la mode des [applications web monopage](https://fr.wikipedia.org/wiki/Application_web_monopage) et du _tout [Node.js](https://fr.wikipedia.org/wiki/Node.js)_, cette version de Rails offre plusieurs possibilités : - construire des applications dynamiques en minimisant l'utilisation du JavaScript et en favorisant le HTML au lieu du JSON. Cette approche est possible grâce à la nouvelle bibliothèque [Hotwire](https://hotwired.dev/) - l'import de modules JavaScript au travers des fichiers versionnés, directement à partir du navigateur grâce à [Import maps](https://github.com/WICG/import-maps) - il est maintenant possible d'utiliser n'importe quel bundler JavaScript, comme [esbuild](https://esbuild.github.io/), [rollup.js](https://www.rollupjs.org) ou le plus classique [Webpack](https://webpack.js.org/), grâce à la nouvelle gem [jsbundling-rails](https://github.com/rails/jsbundling-rails) - suivant la même approche pour le CSS, la gem [cssbundling-rails](https://github.com/rails/cssbundling-rails) permet dorénavant de compiler facilement sa feuille de style en intégrant [Tailwind CSS](https://tailwindcss.com/), [Sass](https://sass-lang.com/dart-sass) ou encore [PostCSS](https://postcss.org/) Attributs chiffrés avec Active Record ===================================== Il est maintenant possible de déclarer des attributs pour chiffrer certaines données au niveau du modèle : ```ruby # app/models/article.rb class Article < ApplicationRecord encrypts :title end # Article.create! title: "Sortie de Ruby on Rails 7.0" # INSERT INTO `articles` (`title`) VALUES ('{\"p\":\"n7J0/ol+a7DeaE[...]1/YjMHbHD4talgF9dt61A==\"}}') ``` Le chiffrement se fait de manière transparente avant l'enregistrement en base de données. Chargement asynchrone des requêtes ================================== Lorsqu'une action du contrôleur doit exécuter plusieurs requêtes, il est maintenant possible de le faire simultanément grâce à _Relation#load_async_. Jusqu'à présent, exécuter trois requêtes durant 100 ms chacune nécessitait 300 ms. Maintenant, il est possible de le faire en parallèle. Zeitwerk par défaut =================== Le chargement automatique dans Rails a toujours été synonyme d'élégance. L'ancienne approche, qui s'accompagnait d'une série de bizarreries et de fonctionnalités manquantes, a finalement été remplacée exclusivement par le [chargeur de code Zeitwerk](https://github.com/fxn/zeitwerk#introduction). Et la dette technique de LinuxFr.org dans tout ça ? =============================================== On ne va pas se mentir : les montées de version majeure de Rails ne sont pas facile à appliquer si l'on souhaite utiliser les dernières fonctionnalités. Au moment où j'écris, [la version propulsant ces quelques lignes](https://github.com/linuxfrorg/linuxfr.org/blob/377636a1369226b77aec48bfea81179223f6dd77/Gemfile#L8) recevra des [correctifs de sécurité majeurs jusqu'au 1er juin 2022](https://guides.rubyonrails.org/maintenance_policy.html#severe-security-issues). Vous l'aurez compris : il nous reste encore 6 mois pour procrastiner tranquillement !