IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Le framework web Ruby on Rails 8.1 est disponible et apporte des continuations de tâches actives, des rapports d'événements structurés et une intégration continue locale

Le , par Alex

8PARTAGES

5  0 
Ruby on Rails 8.1 est désormais disponible et introduit plusieurs mises à jour concernant le déploiement, les tests et les workflows des développeurs. Parmi les nouvelles fonctionnalités, les tâches de longue durée peuvent désormais être divisées en étapes distinctes, ce qui permet de reprendre l'exécution à partir de la dernière étape terminée après un redémarrage. Cette amélioration est utile pour les déploiements utilisant Kamal, qui limite les conteneurs d'exécution des tâches à une fenêtre d'arrêt de trente secondes.

Ruby on Rails (simplifié en Rails) est un framework d'applications web côté serveur écrit en Ruby sous licence MIT. Rails est un framework model–view–controller (MVC) qui fournit des structures par défaut pour une base de données, un service web et des pages web. Il encourage et facilite l'utilisation de normes web telles que JSON ou XML pour le transfert de données et HTML, CSS et JavaScript pour l'interface utilisateur. En plus du MVC, Rails met l'accent sur l'utilisation d'autres modèles et paradigmes d'ingénierie logicielle bien connus, notamment la convention plutôt que la configuration (CoC), ne vous répétez pas (DRY) et le modèle d'enregistrement actif.

Ruby on Rails 8.1 est désormais disponible et introduit plusieurs mises à jour concernant le déploiement, les tests et les workflows des développeurs. Parmi les nouvelles fonctionnalités, les tâches de longue durée peuvent désormais être divisées en étapes distinctes, ce qui permet de reprendre l'exécution à partir de la dernière étape terminée après un redémarrage. Cette amélioration est utile pour les déploiements utilisant Kamal, qui limite les conteneurs d'exécution des tâches à une fenêtre d'arrêt de trente secondes.

En parallèle, Rails 8.1 ajoute un nouveau rapporteur d'événements, qui permet une journalisation structurée des événements et améliore le post-traitement des journaux au-delà de ce qui est possible avec le journaliseur par défaut du framework, convivial pour les humains. En réponse aux améliorations de performances des machines modernes des développeurs, Rails a également introduit un langage spécifique au domaine de déclaration CI par défaut défini dans config/ci.rb et exécuté par bin/ci. Ce changement est motivé par la possibilité d'exécuter localement de grandes suites de tests en quelques minutes, éliminant ainsi le besoin de configurations d'intégration continue entièrement basées sur le cloud pour les petits projets.

Grâce à ces améliorations, les développeurs peuvent désormais rendre plus facilement les réponses Markdown directement. Kamal offre une plus grande flexibilité, car les secrets sont accessibles à partir des identifiants Rails cryptés et un registre d'images distant n'est plus nécessaire pour les déploiements de base. Des mises à jour supplémentaires permettent aux développeurs de marquer les associations Active Record comme obsolètes. Rails 8.1 apporte également d'autres améliorations et corrections de bogues.

https://youtu.be/jXxlKo_Neqo

Poursuite des tâches actives

Les tâches de longue durée peuvent désormais être divisées en étapes distinctes, ce qui permet de poursuivre l'exécution à partir de la dernière étape terminée plutôt que de recommencer depuis le début après un redémarrage. Cela est particulièrement utile lors des déploiements avec Kamal, qui ne laisse que trente secondes aux conteneurs exécutant des tâches pour s'arrêter par défaut.

Code ruby : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class ProcessImportJob < ApplicationJob 
  include ActiveJob::Continuable 
  
  def perform(import_id) 
    @import = Import.find(import_id) 
  
    # block format 
    step :initialize do 
      @import.initialize 
    end 
  
    # step with cursor, the cursor is saved when the job is interrupted 
    step :process do |step| 
      @import.records.find_each(start: step.cursor) do |record| 
        record.process 
        step.advance! from: record.id 
      end 
    end 
  
    # method format 
    step :finalize 
  end 
  
  private 
    def finalize 
      @import.finalize 
    end 
end


Rapports d'événements structurés

Le logger par défaut de Rails est idéal pour une utilisation humaine, mais moins adapté au post-traitement. Le nouveau Event Reporter fournit une interface unifiée pour produire des événements structurés dans les applications Rails :

Code ruby : Sélectionner tout
Rails.event.notify("user.signup", user_id: 123, email: "user@example.com")


Il prend en charge l'ajout de balises aux événements :

Code ruby : Sélectionner tout
1
2
3
4
Rails.event.tagged("graphql") do 
  # Event includes tags: { graphql: true } 
  Rails.event.notify("user.signup", user_id: 123, email: "user@example.com") 
end


Ainsi que le contexte :

Code ruby : Sélectionner tout
1
2
# All events will contain context: {request_id: "abc123", shop_id: 456} 
Rails.event.set_context(request_id: "abc123", shop_id: 456)


Les événements sont émis vers les abonnés. Les applications enregistrent les abonnés afin de contrôler la manière dont les événements sont sérialisés et émis. Les abonnés doivent implémenter une méthode #emit, qui reçoit le hachage de l'événement :

Code ruby : Sélectionner tout
1
2
3
4
5
6
7
8
class LogSubscriber 
  def emit(event) 
    payload = event[:payload].map { |key, value| "#{key}=#{value}" }.join(" ") 
    source_location = event[:source_location] 
    log = "[#{event[:name]}] #{payload} at #{source_location[:filepath]}:#{source_location[:lineno]}" 
    Rails.logger.info(log) 
  end 
end


CI locale

Les machines des développeurs sont devenues incroyablement rapides grâce à leurs nombreux cœurs, ce qui en fait d'excellents exécuteurs locaux, même pour des suites de tests relativement volumineuses. La suite de tests HEY, qui compte plus de 30 000 assertions, prenait auparavant plus de 10 minutes à s'exécuter dans le cloud, si l'on tient compte de la coordination, de la création d'images et de l'exécution parallélisée. Désormais, elle s'exécute localement sur une machine Framework Desktop AMD Linux en seulement 1 min 23 s et sur une M4 Max en 2 min 22 s.

Cela rend non seulement possible, mais également souhaitable, la suppression de la configuration cloud pour l'ensemble de la CI pour de nombreuses applications de petite et moyenne taille. Rails a donc ajouté une déclaration DSL CI par défaut, qui est définie dans config/ci.rb et exécutée par bin/ci. Elle se présente comme suit :

Code ruby : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
CI.run do 
  step "Setup", "bin/setup --skip-server" 
  step "Style: Ruby", "bin/rubocop" 
  
  step "Security: Gem audit", "bin/bundler-audit" 
  step "Security: Importmap vulnerability audit", "bin/importmap audit" 
  step "Security: Brakeman code analysis", "bin/brakeman --quiet --no-pager --exit-on-warn --exit-on-error" 
  step "Tests: Rails", "bin/rails test" 
  step "Tests: Seeds", "env RAILS_ENV=test bin/rails db:seed:replant" 
  
  # Requires the `gh` CLI and `gh extension install basecamp/gh-signoff`. 
  if success? 
    step "Signoff: All systems go. Ready for merge and deploy.", "gh signoff" 
  else 
    failure "Signoff: CI failed. Do not merge or deploy.", "Fix the issues and try again." 
  end 
end


L'intégration optionnelle avec gh garantit que les PR doivent être validées par une exécution CI réussie afin d'être éligibles à la fusion.

Rendu Markdown

Markdown est devenu la lingua franca de l'IA, et Rails a adopté cette adoption en facilitant la réponse aux demandes de markdown et en les rendant directement :

Code ruby : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Page 
  def to_markdown 
    body 
  end 
end 
  
class PagesController < ActionController::Base 
  def show 
    @page = Page.find(params[:id]) 
  
    respond_to do |format| 
      format.html 
      format.md { render markdown: @page } 
    end 
  end 
end


Récupération des informations d'identification en ligne de commande

Kamal peut désormais récupérer facilement ses secrets à partir du magasin d'informations d'identification cryptées de Rails pour les déploiements. Cela en fait une alternative low-fi aux magasins de secrets externes qui ne nécessitent que la clé principale pour fonctionner :

Code ruby : Sélectionner tout
1
2
# .kamal/secrets 
KAMAL_REGISTRY_PASSWORD=$(rails credentials:fetch kamal.registry_password)


Associations obsolètes

Les associations Active Record peuvent désormais être...
La fin de cet article est réservée aux abonnés. Soutenez le Club Developpez.com en prenant un abonnement pour que nous puissions continuer à vous proposer des publications.

Une erreur dans cette actualité ? Signalez-nous-la !