1 Mise à niveau vers Rails 6.1
Si vous mettez à niveau une application existante, il est recommandé d'avoir une bonne couverture de tests avant de commencer. Vous devriez également d'abord mettre à niveau vers Rails 6.0 si ce n'est pas déjà fait, et vous assurer que votre application fonctionne toujours comme prévu avant de tenter une mise à jour vers Rails 6.1. Une liste de points à surveiller lors de la mise à niveau est disponible dans le guide Mise à niveau de Ruby on Rails.
2 Fonctionnalités majeures
2.1 Changement de connexion par base de données
Rails 6.1 vous permet de changer de connexion par base de données. Dans la version 6.0, si vous passiez au rôle "lecture", toutes les connexions à la base de données passaient également au rôle "lecture". Maintenant, dans la version 6.1, si vous définissez legacy_connection_handling
sur false
dans votre configuration, Rails vous permettra de changer de connexion pour une seule base de données en appelant connected_to
sur la classe abstraite correspondante.
2.2 Sharding horizontal
Rails 6.0 permettait de partitionner fonctionnellement (plusieurs partitions, schémas différents) votre base de données, mais ne prenait pas en charge le sharding horizontal (même schéma, plusieurs partitions). Rails ne pouvait pas prendre en charge le sharding horizontal car les modèles dans Active Record ne pouvaient avoir qu'une seule connexion par rôle par classe. Cela est maintenant corrigé et le sharding horizontal est disponible avec Rails.
2.3 Chargement strict des associations
Le chargement strict des associations vous permet de vous assurer que toutes vos associations sont chargées de manière anticipée et d'éviter les problèmes de type N+1.
2.4 Types délégués
Les types délégués sont une alternative à l'héritage sur une seule table. Cela permet de représenter des hiérarchies de classes en permettant à la superclasse d'être une classe concrète représentée par sa propre table. Chaque sous-classe a sa propre table pour les attributs supplémentaires.
2.5 Destruction des associations de manière asynchrone
La destruction asynchrone des associations ajoute la possibilité aux applications de détruire des associations dans un travail en arrière-plan. Cela peut vous aider à éviter les délais d'attente et autres problèmes de performance dans votre application lors de la suppression de données.
3 Railties
Veuillez vous référer au journal des modifications pour les changements détaillés.
3.1 Suppressions
Suppression des tâches
rake notes
obsolètes.Suppression de l'option
connection
obsolète dans la commanderails dbconsole
.Suppression du support de la variable d'environnement
SOURCE_ANNOTATION_DIRECTORIES
obsolète dansrails notes
.Suppression de l'argument
server
obsolète de la commanderails server
.Suppression du support obsolète de l'utilisation de la variable d'environnement
HOST
pour spécifier l'adresse IP du serveur.Suppression des tâches
rake dev:cache
obsolètes.Suppression des tâches
rake routes
obsolètes.Suppression des tâches
rake initializers
obsolètes.
3.2 Dépréciations
3.3 Changements notables
4 Action Cable
Veuillez vous référer au journal des modifications pour les changements détaillés.
4.1 Suppressions
4.2 Dépréciations
4.3 Changements notables
5 Action Pack
Veuillez vous référer au journal des modifications pour les changements détaillés.
5.1 Suppressions
Suppression de
ActionDispatch::Http::ParameterFilter
obsolète.Suppression de
force_ssl
obsolète au niveau du contrôleur.
5.2 Dépréciations
- Dépréciation de
config.action_dispatch.return_only_media_type_on_content_type
.
5.3 Changements notables
- Modification de
ActionDispatch::Response#content_type
pour renvoyer l'en-tête Content-Type complet.
6 Action View
Veuillez vous référer au journal des modifications pour les changements détaillés.
6.1 Suppressions
Suppression de
escape_whitelist
obsolète deActionView::Template::Handlers::ERB
.Suppression de
find_all_anywhere
obsolète deActionView::Resolver
.Suppression de
formats
obsolète deActionView::Template::HTML
.Suppression de
formats
obsolète deActionView::Template::RawFile
.Suppression de
formats
obsolète deActionView::Template::Text
.Suppression de
find_file
obsolète deActionView::PathSet
.Suppression de
rendered_format
obsolète deActionView::LookupContext
.Suppression de
find_file
obsolète deActionView::ViewPaths
.Suppression du support obsolète de passer un objet qui n'est pas un
ActionView::LookupContext
en premier argument dansActionView::Base#initialize
.Suppression de l'argument
format
obsolète deActionView::Base#initialize
.Suppression de
ActionView::Template#refresh
obsolète.Suppression de
ActionView::Template#original_encoding
obsolète.Suppression de
ActionView::Template#variants
obsolète.Suppression de
ActionView::Template#formats
obsolète.Suppression de
ActionView::Template#virtual_path=
obsolète.Suppression de
ActionView::Template#updated_at
obsolète.Suppression de l'argument
updated_at
requis pourActionView::Template#initialize
obsolète.Suppression de
ActionView::Template.finalize_compiled_template_methods
obsolète.Suppression de
config.action_view.finalize_compiled_template_methods
obsolète.Suppression du support de l'appel de
ActionView::ViewPaths#with_fallback
avec un bloc.Suppression du support de passer des chemins absolus à
render template:
.Suppression du support de passer des chemins relatifs à
render file:
.Suppression du support des gestionnaires de templates qui n'acceptent pas deux arguments.
Suppression de l'argument
pattern
obsolète dansActionView::Template::PathResolver
.Suppression du support obsolète d'appeler des méthodes privées d'un objet dans certains helpers de vue.
6.2 Dépréciations
6.3 Changements notables
Exiger que les sous-classes de
ActionView::Base
implémentent#compiled_method_container
.Rendre l'argument
locals
obligatoire dansActionView::Template#initialize
.Les helpers d'assets
javascript_include_tag
etstylesheet_link_tag
génèrent un en-têteLink
qui donne des indications aux navigateurs modernes sur le préchargement des assets. Cela peut être désactivé en définissantconfig.action_view.preload_links_header
surfalse
.
7 Action Mailer
Veuillez vous référer au journal des modifications pour des détails sur les changements.
7.1 Suppressions
- Supprimer la méthode obsolète
ActionMailer::Base.receive
en faveur de Action Mailbox.
7.2 Dépréciations
7.3 Changements notables
8 Active Record
Veuillez vous référer au journal des modifications pour des détails sur les changements.
8.1 Suppressions
Supprimer les méthodes obsolètes de
ActiveRecord::ConnectionAdapters::DatabaseLimits
.column_name_length
table_name_length
columns_per_table
indexes_per_table
columns_per_multicolumn_index
sql_query_length
joins_per_query
Supprimer la méthode obsolète
ActiveRecord::ConnectionAdapters::AbstractAdapter#supports_multi_insert?
.Supprimer la méthode obsolète
ActiveRecord::ConnectionAdapters::AbstractAdapter#supports_foreign_keys_in_create?
.Supprimer la méthode obsolète
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter#supports_ranges?
.Supprimer les méthodes obsolètes
ActiveRecord::Base#update_attributes
etActiveRecord::Base#update_attributes!
.Supprimer l'argument
migrations_path
obsolète dansActiveRecord::ConnectionAdapter::SchemaStatements#assume_migrated_upto_version
.Supprimer la méthode obsolète
config.active_record.sqlite3.represent_boolean_as_integer
.Supprimer les méthodes obsolètes de
ActiveRecord::DatabaseConfigurations
.fetch
each
first
values
[]=
Supprimer la méthode obsolète
ActiveRecord::Result#to_hash
.Supprimer la prise en charge obsolète de l'utilisation de SQL brut non sécurisé dans les méthodes de
ActiveRecord::Relation
.
8.2 Dépréciations
Déprécier
ActiveRecord::Base.allow_unsafe_raw_sql
.Déprécier l'argument
database
dansconnected_to
.Déprécier
connection_handlers
lorsquelegacy_connection_handling
est défini sur false.
8.3 Changements notables
MySQL : Le validateur d'unicité respecte maintenant la collation par défaut de la base de données, n'impose plus une comparaison sensible à la casse par défaut.
relation.create
ne fuit plus la portée vers les méthodes de requête de niveau de classe dans le bloc d'initialisation et les rappels.Avant :
User.where(name: "John").create do |john| User.find_by(name: "David") # => nil end
Après :
User.where(name: "John").create do |john| User.find_by(name: "David") # => #<User name: "David", ...> end
La chaîne de portée nommée ne fuit plus la portée vers les méthodes de requête de niveau de classe.
class User < ActiveRecord::Base scope :david, -> { User.where(name: "David") } end
Avant :
User.where(name: "John").david # SELECT * FROM users WHERE name = 'John' AND name = 'David'
Après :
User.where(name: "John").david # SELECT * FROM users WHERE name = 'David'
where.not
génère maintenant des prédicats NAND au lieu de NOR.Avant :
User.where.not(name: "Jon", role: "admin") # SELECT * FROM users WHERE name != 'Jon' AND role != 'admin'
Après :
User.where.not(name: "Jon", role: "admin") # SELECT * FROM users WHERE NOT (name = 'Jon' AND role = 'admin')
Pour utiliser la nouvelle gestion de connexion par base de données, les applications doivent définir
legacy_connection_handling
sur false et supprimer les accesseurs obsolètes surconnection_handlers
. Les méthodes publiques pourconnects_to
etconnected_to
ne nécessitent aucun changement.
9 Active Storage
Veuillez vous référer au journal des modifications pour des détails sur les changements.
9.1 Suppressions
Supprimer la prise en charge obsolète pour passer des opérations
:combine_options
àActiveStorage::Transformers::ImageProcessing
.Supprimer la classe obsolète
ActiveStorage::Transformers::MiniMagickTransformer
.Supprimer la configuration obsolète
config.active_storage.queue
.Supprimer la classe obsolète
ActiveStorage::Downloading
.
9.2 Dépréciations
- Déprécier
Blob.create_after_upload
au profit deBlob.create_and_upload
. (Pull Request)
9.3 Changements notables
- Ajouter
Blob.create_and_upload
pour créer un nouveau blob et télécharger leio
donné vers le service. (Pull Request) - Une colonne
service_name
a été ajoutée àActiveStorage::Blob
. Il est nécessaire d'exécuter une migration après la mise à niveau. Exécutezbin/rails app:update
pour générer cette migration.
10 Active Model
Veuillez vous référer au journal des modifications pour des détails sur les changements.
10.1 Suppressions
10.2 Dépréciations
10.3 Changements notables
- Les erreurs d'Active Model sont maintenant des objets avec une interface qui permet à votre application de gérer et d'interagir plus facilement avec les erreurs générées par les modèles. La fonctionnalité inclut une interface de requête, permet des tests plus précis et donne accès aux détails des erreurs.
11 Active Support
Veuillez vous référer au journal des modifications pour des détails sur les changements.
11.1 Suppressions
Supprimer le recours obsolète à
I18n.default_locale
lorsqueconfig.i18n.fallbacks
est vide.Supprimer la constante obsolète
LoggerSilence
.Supprimer la méthode obsolète
ActiveSupport::LoggerThreadSafeLevel#after_initialize
.Supprimer les méthodes obsolètes
Module#parent_name
,Module#parent
etModule#parents
.Supprimer le fichier obsolète
active_support/core_ext/module/reachable
.Supprimer le fichier obsolète
active_support/core_ext/numeric/inquiry
.Supprimer le fichier obsolète
active_support/core_ext/array/prepend_and_append
.Supprimer le fichier obsolète
active_support/core_ext/hash/compact
.Supprimer le fichier obsolète
active_support/core_ext/hash/transform_values
.Supprimer le fichier obsolète
active_support/core_ext/range/include_range
.Supprimer les méthodes obsolètes
ActiveSupport::Multibyte::Chars#consumes?
etActiveSupport::Multibyte::Chars#normalize
.Supprimer les méthodes obsolètes
ActiveSupport::Multibyte::Unicode.pack_graphemes
,ActiveSupport::Multibyte::Unicode.unpack_graphemes
,ActiveSupport::Multibyte::Unicode.normalize
,ActiveSupport::Multibyte::Unicode.downcase
,ActiveSupport::Multibyte::Unicode.upcase
etActiveSupport::Multibyte::Unicode.swapcase
.Supprimer la méthode obsolète
ActiveSupport::Notifications::Instrumenter#end=
.
11.2 Dépréciations
- Déprécier
ActiveSupport::Multibyte::Unicode.default_normalization_form
.
11.3 Changements notables
12 Active Job
Veuillez vous référer au journal des modifications pour des détails sur les changements.
12.1 Suppressions
12.2 Dépréciations
- Déprécier
config.active_job.return_false_on_aborted_enqueue
.
12.3 Changements notables
- Renvoyer
false
lorsque l'enfilement d'un travail est annulé.
13 Action Text
Veuillez vous référer au journal des modifications pour des détails sur les changements.
13.1 Suppressions
13.2 Dépréciations
13.3 Changements notables
Ajouter une méthode pour confirmer l'existence d'un contenu de texte enrichi en ajoutant
?
après le nom de l'attribut de texte enrichi. (Pull Request)Ajouter l'aide de test système
fill_in_rich_text_area
pour trouver un éditeur Trix et le remplir avec le contenu HTML donné. (Pull Request)Ajoutez
ActionText::FixtureSet.attachment
pour générer des éléments<action-text-attachment>
dans les fixtures de la base de données. (Pull Request)
14 Action Mailbox
Veuillez vous référer au Changelog pour les changements détaillés.
14.1 Suppressions
14.2 Dépréciations
- Dépréciez
Rails.application.credentials.action_mailbox.api_key
etMAILGUN_INGRESS_API_KEY
au profit deRails.application.credentials.action_mailbox.signing_key
etMAILGUN_INGRESS_SIGNING_KEY
.
14.3 Changements notables
15 Ruby on Rails Guides
Veuillez vous référer au Changelog pour les changements détaillés.
15.1 Changements notables
16 Crédits
Consultez la liste complète des contributeurs à Rails pour les nombreuses personnes qui ont passé de nombreuses heures à faire de Rails le framework stable et robuste qu'il est. Bravo à tous.
Retour d'information
Vous êtes encouragé à contribuer à l'amélioration de la qualité de ce guide.
Veuillez contribuer si vous trouvez des fautes de frappe ou des erreurs factuelles. Pour commencer, vous pouvez lire notre contribution à la documentation section.
Vous pouvez également trouver du contenu incomplet ou des informations qui ne sont pas à jour. Veuillez ajouter toute documentation manquante pour la version principale. Assurez-vous de vérifier Edge Guides d'abord pour vérifier si les problèmes ont déjà été résolus ou non sur la branche principale. Consultez les Directives des guides Ruby on Rails pour le style et les conventions.
Si pour une raison quelconque vous repérez quelque chose à corriger mais ne pouvez pas le faire vous-même, veuillez ouvrir un problème.
Et enfin, toute discussion concernant la documentation de Ruby on Rails est la bienvenue sur le Forum officiel de Ruby on Rails.