edge
Plus sur rubyonrails.org: Plus de Ruby on Rails

Configuration des applications Rails

Ce guide couvre les fonctionnalités de configuration et d'initialisation disponibles pour les applications Rails.

Après avoir lu ce guide, vous saurez :

1 Emplacements pour le code d'initialisation

Rails propose quatre emplacements standard pour placer le code d'initialisation :

  • config/application.rb
  • Fichiers de configuration spécifiques à l'environnement
  • Initialisateurs
  • Après-initialisateurs

2 Exécution du code avant Rails

Dans le cas rare où votre application doit exécuter du code avant le chargement de Rails lui-même, placez-le au-dessus de l'appel à require "rails/all" dans config/application.rb.

3 Configuration des composants Rails

En général, la configuration de Rails signifie la configuration des composants de Rails, ainsi que la configuration de Rails lui-même. Le fichier de configuration config/application.rb et les fichiers de configuration spécifiques à l'environnement (comme config/environments/production.rb) vous permettent de spécifier les différents paramètres que vous souhaitez transmettre à tous les composants.

Par exemple, vous pouvez ajouter ce paramètre au fichier config/application.rb :

config.time_zone = 'Central Time (US & Canada)'

Il s'agit d'un paramètre pour Rails lui-même. Si vous souhaitez transmettre des paramètres à des composants Rails individuels, vous pouvez le faire via le même objet config dans config/application.rb :

config.active_record.schema_format = :ruby

Rails utilisera ce paramètre particulier pour configurer Active Record.

AVERTISSEMENT : Utilisez les méthodes de configuration publiques plutôt que d'appeler directement la classe associée. Par exemple, utilisez Rails.application.config.action_mailer.options au lieu de ActionMailer::Base.options.

NOTE : Si vous avez besoin d'appliquer une configuration directement à une classe, utilisez un hook de chargement différé dans un initialisateur pour éviter le chargement automatique de la classe avant que l'initialisation ne soit terminée. Cela ne fonctionnera pas car le chargement automatique pendant l'initialisation ne peut pas être répété en toute sécurité lorsque l'application est rechargée.

3.1 Valeurs par défaut versionnées

config.load_defaults charge les valeurs de configuration par défaut pour une version cible et toutes les versions antérieures. Par exemple, config.load_defaults 6.1 chargera les valeurs par défaut pour toutes les versions jusqu'à la version 6.1.

Voici les valeurs par défaut associées à chaque version cible. En cas de valeurs conflictuelles, les versions plus récentes ont la priorité sur les versions plus anciennes.

3.1.1 Valeurs par défaut pour la version cible 7.1

3.1.2 Valeurs par défaut pour la version cible 7.0

3.1.3 Valeurs par défaut pour la version cible 6.0

3.1.4 Valeurs par défaut pour la version cible 5.2

3.1.5 Valeurs par défaut pour la version cible 5.1

3.1.6 Valeurs par défaut pour la version cible 5.0

3.2 Configuration générale de Rails

Les méthodes de configuration suivantes doivent être appelées sur un objet Rails::Railtie, tel qu'une sous-classe de Rails::Engine ou Rails::Application.

3.2.1 config.add_autoload_paths_to_load_path

Indique si les chemins d'autoload doivent être ajoutés à $LOAD_PATH. Il est recommandé de le définir sur false en mode :zeitwerk tôt, dans config/application.rb. Zeitwerk utilise des chemins absolus en interne, et les applications exécutées en mode :zeitwerk n'ont pas besoin de require_dependency, donc les modèles, les contrôleurs, les jobs, etc. n'ont pas besoin d'être dans $LOAD_PATH. En définissant cela sur false, Ruby n'a pas besoin de vérifier ces répertoires lors de la résolution des appels require avec des chemins relatifs, et cela économise du travail et de la RAM à Bootsnap, car il n'a pas besoin de les indexer.

La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est
(originale) true
7.1 false

Le répertoire lib n'est pas affecté par ce drapeau, il est toujours ajouté à $LOAD_PATH.

3.2.2 config.after_initialize

Prend un bloc qui sera exécuté après que Rails ait terminé l'initialisation de l'application. Cela inclut l'initialisation du framework lui-même, des moteurs et de tous les initialiseurs de l'application dans config/initializers. Notez que ce bloc sera exécuté pour les tâches rake. Utile pour configurer des valeurs définies par d'autres initialiseurs :

config.after_initialize do
  ActionView::Base.sanitized_allowed_tags.delete 'div'
end

3.2.3 config.after_routes_loaded

Prend un bloc qui sera exécuté après que Rails ait terminé de charger les routes de l'application. Ce bloc sera également exécuté chaque fois que les routes sont rechargées.

config.after_routes_loaded do
  # Code qui fait quelque chose avec Rails.application.routes
end

3.2.4 config.allow_concurrency

Contrôle si les requêtes doivent être traitées de manière concurrente. Cela ne doit être défini sur false que si le code de l'application n'est pas thread-safe. Par défaut, cela est défini sur true.

3.2.5 config.asset_host

Définit l'hôte pour les assets. Utile lorsque des CDN sont utilisés pour héberger des assets, ou lorsque vous souhaitez contourner les contraintes de concurrence intégrées aux navigateurs en utilisant des alias de domaine différents. Version abrégée de config.action_controller.asset_host.

3.2.6 config.assume_ssl

Fait croire à l'application que toutes les requêtes arrivent via SSL. Cela est utile lors de la mise en proxy via un équilibreur de charge qui termine SSL, la requête transmise apparaîtra comme étant HTTP au lieu de HTTPS pour l'application. Cela permet aux redirections et à la sécurité des cookies de cibler HTTP au lieu de HTTPS. Ce middleware fait en sorte que le serveur suppose que le proxy a déjà terminé SSL et que la requête est réellement HTTPS.

3.2.7 config.autoflush_log

Active l'écriture immédiate des fichiers journaux au lieu de les mettre en mémoire tampon. Par défaut, cette option est activée (true).

3.2.8 config.autoload_once_paths

Accepte un tableau de chemins à partir desquels Rails chargera automatiquement les constantes qui ne seront pas effacées à chaque requête. Cela est pertinent si le rechargement est activé, ce qui est le cas par défaut dans l'environnement development. Sinon, le chargement automatique se fait une seule fois. Tous les éléments de ce tableau doivent également être présents dans autoload_paths. Par défaut, il s'agit d'un tableau vide.

3.2.9 config.autoload_paths

Accepte un tableau de chemins à partir desquels Rails chargera automatiquement les constantes. Par défaut, il s'agit d'un tableau vide. Depuis Rails 6, il n'est pas recommandé de modifier cette option. Voir Chargement automatique et rechargement des constantes.

3.2.10 config.autoload_lib(ignore:)

Cette méthode ajoute lib à config.autoload_paths et config.eager_load_paths.

Normalement, le répertoire lib contient des sous-répertoires qui ne doivent pas être chargés automatiquement ou chargés immédiatement. Veuillez passer leur nom relatif à lib en utilisant l'argument de mot-clé ignore requis. Par exemple,

config.autoload_lib(ignore: %w(assets tasks generators))

Veuillez consulter plus de détails dans le guide de chargement automatique.

3.2.11 config.autoload_lib_once(ignore:)

La méthode config.autoload_lib_once est similaire à config.autoload_lib, à la différence qu'elle ajoute lib à config.autoload_once_paths à la place.

En appelant config.autoload_lib_once, les classes et modules dans lib peuvent être chargés automatiquement, même à partir des initialiseurs de l'application, mais ne seront pas rechargés.

3.2.12 config.beginning_of_week

Définit le début de la semaine par défaut pour l'application. Accepte un jour de la semaine valide sous forme de symbole (par exemple, :monday).

3.2.13 config.cache_classes

Ancien paramètre équivalent à !config.enable_reloading. Pris en charge pour assurer la compatibilité ascendante.

3.2.14 config.cache_store

Configure le magasin de cache à utiliser pour le cache de Rails. Les options incluent l'un des symboles :memory_store, :file_store, :mem_cache_store, :null_store, :redis_cache_store, ou un objet qui implémente l'API de cache. Par défaut, il s'agit de :file_store. Voir Magasins de cache pour les options de configuration spécifiques à chaque magasin.

3.2.15 config.colorize_logging

Indique si les codes de couleur ANSI doivent être utilisés lors de l'enregistrement des informations. Par défaut, cette option est activée (true).

3.2.16 config.consider_all_requests_local

Est un indicateur. Si cette option est activée (true), toute erreur entraînera l'affichage d'informations de débogage détaillées dans la réponse HTTP, et le contrôleur Rails::Info affichera le contexte d'exécution de l'application dans /rails/info/properties. Par défaut, cette option est activée (true) dans les environnements de développement et de test, et désactivée (false) en production. Pour un contrôle plus précis, définissez cette option sur false et implémentez la méthode show_detailed_exceptions? dans les contrôleurs pour spécifier quelles requêtes doivent fournir des informations de débogage en cas d'erreur.

3.2.17 config.console

Vous permet de définir la classe qui sera utilisée comme console lorsque vous exécutez bin/rails console. Il est préférable de l'exécuter dans le bloc console :

console do
  # ce bloc est appelé uniquement lors de l'exécution de la console,
  # nous pouvons donc charger en toute sécurité pry ici
  require "pry"
  config.console = Pry
end

3.2.18 config.content_security_policy_nonce_directives

Voir Ajout d'un nonce dans le guide de sécurité.

3.2.19 config.content_security_policy_nonce_generator

Voir Ajout d'un nonce dans le guide de sécurité.

3.2.20 config.content_security_policy_report_only

Voir Signalement des violations dans le guide de sécurité.

3.2.21 config.credentials.content_path

Le chemin du fichier de credentials chiffré.

Par défaut, il s'agit de config/credentials/#{Rails.env}.yml.enc s'il existe, sinon config/credentials.yml.enc.

REMARQUE : Pour que les commandes bin/rails credentials reconnaissent cette valeur, elle doit être définie dans config/application.rb ou config/environments/#{Rails.env}.rb.

3.2.22 config.credentials.key_path

Le chemin du fichier de clé de credentials chiffré.

Par défaut, il s'agit de config/credentials/#{Rails.env}.key s'il existe, sinon config/master.key.

REMARQUE : Pour que les commandes bin/rails credentials reconnaissent cette valeur, elle doit être définie dans config/application.rb ou config/environments/#{Rails.env}.rb.

3.2.23 config.debug_exception_response_format

Définit le format utilisé dans les réponses lorsque des erreurs se produisent dans l'environnement de développement. Par défaut, il est défini sur :api pour les applications API uniquement et :default pour les applications normales.

3.2.24 config.disable_sandbox

Contrôle si quelqu'un peut ou non démarrer une console en mode sandbox. Cela permet d'éviter une session de console sandbox qui s'exécute pendant une longue période et qui pourrait épuiser la mémoire du serveur de base de données. Par défaut, il est défini sur false.

3.2.25 config.eager_load

Lorsque cette option est définie sur true, charge en avance tous les espaces de noms enregistrés dans config.eager_load_namespaces. Cela inclut votre application, les moteurs, les frameworks Rails et tout autre espace de noms enregistré.

3.2.26 config.eager_load_namespaces

Enregistre les espaces de noms qui sont chargés en avance lorsque config.eager_load est défini sur true. Tous les espaces de noms dans la liste doivent répondre à la méthode eager_load!.

3.2.27 config.eager_load_paths

Accepte un tableau de chemins à partir desquels Rails chargera en avance au démarrage si config.eager_load est défini sur true. Par défaut, il inclut tous les dossiers du répertoire app de l'application.

3.2.28 config.enable_reloading

Si config.enable_reloading est défini sur true, les classes et modules de l'application sont rechargés entre les requêtes web s'ils ont été modifiés. Par défaut, il est défini sur true dans l'environnement development et sur false dans l'environnement production.

Le prédicat config.reloading_enabled? est également défini.

3.2.29 config.encoding

Configure l'encodage global de l'application. Par défaut, il est défini sur UTF-8.

3.2.30 config.exceptions_app

Définit l'application d'exceptions invoquée par le middleware ShowException lorsqu'une exception se produit. Par défaut, il est défini sur ActionDispatch::PublicExceptions.new(Rails.public_path).

Les applications d'exceptions doivent gérer les erreurs ActionDispatch::Http::MimeNegotiation::InvalidType, qui sont levées lorsqu'un client envoie un en-tête Accept ou Content-Type invalide. L'application ActionDispatch::PublicExceptions par défaut le fait automatiquement, en définissant le Content-Type sur text/html et en renvoyant un statut 406 Not Acceptable. Si cette erreur n'est pas gérée, une erreur 500 Internal Server Error se produira.

Utiliser Rails.application.routes RouteSet comme application d'exceptions nécessite également cette gestion spéciale. Cela pourrait ressembler à ceci :

# config/application.rb
config.exceptions_app = CustomExceptionsAppWrapper.new(exceptions_app: routes)

# lib/custom_exceptions_app_wrapper.rb
class CustomExceptionsAppWrapper
  def initialize(exceptions_app:)
    @exceptions_app = exceptions_app
  end

  def call(env)
    request = ActionDispatch::Request.new(env)

    fallback_to_html_format_if_invalid_mime_type(request)

    @exceptions_app.call(env)
  end

  private
    def fallback_to_html_format_if_invalid_mime_type(request)
      request.formats
    rescue ActionDispatch::Http::MimeNegotiation::InvalidType
      request.set_header "CONTENT_TYPE", "text/html"
    end
end

3.2.31 config.file_watcher

Est la classe utilisée pour détecter les mises à jour de fichiers dans le système de fichiers lorsque config.reload_classes_only_on_change est défini sur true. Rails est livré avec ActiveSupport::FileUpdateChecker, qui est la valeur par défaut, et ActiveSupport::EventedFileUpdateChecker (celui-ci dépend de la gem listen). Les classes personnalisées doivent se conformer à l'API ActiveSupport::FileUpdateChecker.

3.2.32 config.filter_parameters

Utilisé pour filtrer les paramètres que vous ne souhaitez pas afficher dans les journaux, tels que les mots de passe ou les numéros de carte de crédit. Il filtre également les valeurs sensibles des colonnes de la base de données lors de l'appel à #inspect sur un objet Active Record. Par défaut, Rails filtre les mots de passe en ajoutant les filtres suivants dans config/initializers/filter_parameter_logging.rb.

Rails.application.config.filter_parameters += [
  :passw, :secret, :token, :_key, :crypt, :salt, :certificate, :otp, :ssn
]

Le filtre des paramètres fonctionne par correspondance partielle avec une expression régulière.

3.2.33 config.filter_redirect

Utilisé pour filtrer les URL de redirection des journaux de l'application.

Rails.application.config.filter_redirect += ['s3.amazonaws.com', /private-match/]

Le filtre de redirection fonctionne en testant si les URL incluent des chaînes de caractères ou correspondent à des expressions régulières.

3.2.34 config.force_ssl

Force toutes les requêtes à être servies via HTTPS et définit "https://" comme protocole par défaut lors de la génération des URL. L'application du HTTPS est gérée par le middleware ActionDispatch::SSL, qui peut être configuré via config.ssl_options.

3.2.35 config.helpers_paths

Définit un tableau de chemins supplémentaires pour charger les aides à la vue.

3.2.36 config.host_authorization

Accepte un hachage d'options pour configurer le middleware HostAuthorization.

3.2.37 config.hosts

Un tableau de chaînes de caractères, d'expressions régulières ou d'IPAddr utilisées pour valider l'en-tête Host. Utilisé par le middleware HostAuthorization pour aider à prévenir les attaques de rebinding DNS.

3.2.38 config.javascript_path

Définit le chemin où se trouve le JavaScript de votre application par rapport au répertoire app. La valeur par défaut est javascript, utilisée par webpacker. Le javascript_path configuré d'une application sera exclu des autoload_paths.

3.2.39 config.log_file_size

Définit la taille maximale du fichier journal de Rails en octets. Par défaut, elle est de 104_857_600 (100 MiB) en développement et en test, et illimitée dans tous les autres environnements.

3.2.40 config.log_formatter

Définit le formateur du journal de Rails. Cette option est par défaut une instance de ActiveSupport::Logger::SimpleFormatter pour tous les environnements. Si vous définissez une valeur pour config.logger, vous devez passer manuellement la valeur de votre formateur à votre journal avant qu'il ne soit enveloppé dans une instance de ActiveSupport::TaggedLogging, Rails ne le fera pas pour vous.

3.2.41 config.log_level

Définit la verbosité du journal de Rails. Cette option est par défaut :debug pour tous les environnements sauf la production, où elle est par défaut :info. Les niveaux de journal disponibles sont : :debug, :info, :warn, :error, :fatal et :unknown.

3.2.42 config.log_tags

Accepte une liste de méthodes auxquelles l'objet request répond, un Proc qui accepte l'objet request, ou quelque chose qui répond à to_s. Cela facilite l'ajout d'informations de débogage telles que le sous-domaine et l'ID de la requête aux lignes de journal - deux informations très utiles pour le débogage d'applications de production multi-utilisateurs.

3.2.43 config.logger

Est le journal qui sera utilisé pour Rails.logger et tout autre journal de Rails associé tel que ActiveRecord::Base.logger. Par défaut, il s'agit d'une instance de ActiveSupport::TaggedLogging qui enveloppe une instance de ActiveSupport::Logger qui enregistre un journal dans le répertoire log/. Vous pouvez fournir un journal personnalisé, pour une compatibilité totale, vous devez suivre ces directives :

  • Pour prendre en charge un formateur, vous devez assigner manuellement un formateur à partir de la valeur config.log_formatter au journal.
  • Pour prendre en charge les journaux tagués, l'instance de journal doit être enveloppée avec ActiveSupport::TaggedLogging.
  • Pour prendre en charge le silence, le journal doit inclure le module ActiveSupport::LoggerSilence. La classe ActiveSupport::Logger inclut déjà ces modules.
class MyLogger < ::Logger
  include ActiveSupport::LoggerSilence
end

mylogger           = MyLogger.new(STDOUT)
mylogger.formatter = config.log_formatter
config.logger      = ActiveSupport::TaggedLogging.new(mylogger)

3.2.44 config.middleware

Vous permet de configurer le middleware de l'application. Cela est expliqué en détail dans la section Configuration du middleware ci-dessous.

3.2.45 config.precompile_filter_parameters

Lorsque true, précompile config.filter_parameters en utilisant ActiveSupport::ParameterFilter.precompile_filters.

La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est
(originale) false
7.1 true

3.2.46 config.public_file_server.enabled

Configure Rails pour servir les fichiers statiques à partir du répertoire public. Cette option est activée par défaut (true), mais dans l'environnement de production, elle est désactivée (false) car le logiciel serveur (par exemple NGINX ou Apache) utilisé pour exécuter l'application doit servir les fichiers statiques à la place. Si vous exécutez ou testez votre application en production en utilisant WEBrick (il n'est pas recommandé d'utiliser WEBrick en production), définissez l'option sur true. Sinon, vous ne pourrez pas utiliser la mise en cache des pages et demander des fichiers qui existent dans le répertoire public.

3.2.47 config.railties_order

Permet de spécifier manuellement l'ordre de chargement des Railties/Engines. La valeur par défaut est [:all].

config.railties_order = [Blog::Engine, :main_app, :all]

3.2.48 config.rake_eager_load

Lorsque défini sur true, charge l'application de manière anticipée lors de l'exécution des tâches Rake. Par défaut, défini sur false.

3.2.49 config.read_encrypted_secrets

OBSOLÈTE : Vous devriez utiliser les credentials à la place des secrets chiffrés.

Lorsque défini sur true, tente de lire les secrets chiffrés depuis config/secrets.yml.enc.

3.2.50 config.relative_url_root

Peut être utilisé pour indiquer à Rails que vous déployez dans un sous-répertoire (configuring.html#deploy-to-a-subdirectory-relative-url-root). La valeur par défaut est ENV['RAILS_RELATIVE_URL_ROOT'].

3.2.51 config.reload_classes_only_on_change

Active ou désactive le rechargement des classes uniquement lorsque les fichiers suivis changent. Par défaut, suit tout ce qui se trouve dans les chemins de chargement automatique et est défini sur true. Si config.enable_reloading est défini sur false, cette option est ignorée.

3.2.52 config.require_master_key

Empêche le démarrage de l'application si une clé principale n'a pas été rendue disponible via ENV["RAILS_MASTER_KEY"] ou le fichier config/master.key.

3.2.53 config.secret_key_base

La valeur de secours pour spécifier la clé secrète d'un générateur de clés d'application. Il est recommandé de ne pas le définir et de plutôt spécifier une secret_key_base dans config/credentials.yml.enc. Consultez la documentation de l'API secret_key_base pour plus d'informations et d'autres méthodes de configuration alternatives.

3.2.54 config.server_timing

Lorsque défini sur true, ajoute le middleware ServerTiming à la pile des middlewares.

3.2.55 config.session_options

Options supplémentaires transmises à config.session_store. Vous devriez utiliser config.session_store pour le définir au lieu de le modifier vous-même.

config.session_store :cookie_store, key: "_your_app_session"
config.session_options # => {key: "_your_app_session"}

3.2.56 config.session_store

Spécifie quelle classe utiliser pour stocker la session. Les valeurs possibles sont :cache_store, :cookie_store, :mem_cache_store, un stockage personnalisé ou :disabled. :disabled indique à Rails de ne pas gérer les sessions.

Ce paramètre est configuré via un appel de méthode régulier, plutôt qu'un setter. Cela permet de passer des options supplémentaires :

config.session_store :cookie_store, key: "_your_app_session"

Si un stockage personnalisé est spécifié sous forme de symbole, il sera résolu dans l'espace de noms ActionDispatch::Session :

# utilise ActionDispatch::Session::MyCustomStore comme stockage de session
config.session_store :my_custom_store

Le stockage par défaut est un stockage de cookies avec le nom de l'application comme clé de session.

3.2.57 config.ssl_options

Options de configuration pour le middleware ActionDispatch::SSL.

La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est
(originale) {}
5.0 { hsts: { subdomains: true } }

3.2.58 config.time_zone

Définit le fuseau horaire par défaut pour l'application et active la prise en compte du fuseau horaire pour Active Record.

3.2.59 config.x

Utilisé pour ajouter facilement une configuration personnalisée imbriquée à l'objet de configuration de l'application.

  config.x.payment_processing.schedule = :daily
  Rails.configuration.x.payment_processing.schedule # => :daily

Voir Configuration personnalisée

3.3 Configuration des assets

3.3.1 config.assets.css_compressor

Définit le compresseur CSS à utiliser. Il est défini par défaut par sass-rails. La seule valeur alternative à l'heure actuelle est :yui, qui utilise la gem yui-compressor.

3.3.2 config.assets.js_compressor

Définit le compresseur JavaScript à utiliser. Les valeurs possibles sont :terser, :closure, :uglifier et :yui, qui nécessitent l'utilisation des gems terser, closure-compiler, uglifier ou yui-compressor respectivement.

3.3.3 config.assets.gzip

Un indicateur qui active la création d'une version gzippée des assets compilés, ainsi que des assets non gzippés. Défini sur true par défaut.

3.3.4 config.assets.paths

Contient les chemins utilisés pour rechercher les assets. L'ajout de chemins à cette option de configuration entraînera l'utilisation de ces chemins dans la recherche des assets.

3.3.5 config.assets.precompile

Vous permet de spécifier des actifs supplémentaires (autres que application.css et application.js) qui doivent être précompilés lorsque bin/rails assets:precompile est exécuté.

3.3.6 config.assets.unknown_asset_fallback

Vous permet de modifier le comportement du pipeline d'actifs lorsqu'un actif n'est pas dans le pipeline, si vous utilisez sprockets-rails 3.2.0 ou une version ultérieure.

La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est
(original) true
5.1 false

3.3.7 config.assets.prefix

Définit le préfixe à partir duquel les actifs sont servis. Par défaut, /assets.

3.3.8 config.assets.manifest

Définit le chemin complet à utiliser pour le fichier manifeste du précompilateur d'actifs. Par défaut, un fichier nommé manifest-<aléatoire>.json dans le répertoire config.assets.prefix du dossier public.

3.3.9 config.assets.digest

Active l'utilisation des empreintes digitales SHA256 dans les noms des actifs. Par défaut, true.

3.3.10 config.assets.debug

Désactive la concaténation et la compression des actifs. Par défaut, true dans development.rb.

3.3.11 config.assets.version

Est une chaîne d'option utilisée dans la génération de hachage SHA256. Cela peut être modifié pour forcer la recompilation de tous les fichiers.

3.3.12 config.assets.compile

Est un booléen qui peut être utilisé pour activer la compilation en direct de Sprockets en production.

3.3.13 config.assets.logger

Accepte un journal conforme à l'interface de Log4r ou de la classe Ruby Logger par défaut. Par défaut, le même journal configuré à config.logger. Définir config.assets.logger sur false désactivera l'enregistrement des actifs servis.

3.3.14 config.assets.quiet

Désactive l'enregistrement des demandes d'actifs. Par défaut, true dans development.rb.

3.4 Configuration des générateurs

Rails vous permet de modifier les générateurs utilisés avec la méthode config.generators. Cette méthode prend un bloc :

config.generators do |g|
  g.orm :active_record
  g.test_framework :test_unit
end

L'ensemble complet de méthodes pouvant être utilisées dans ce bloc est le suivant :

  • force_plural permet des noms de modèles pluriels. Par défaut, false.
  • helper définit s'il faut générer des helpers. Par défaut, true.
  • integration_tool définit l'outil d'intégration à utiliser pour générer des tests d'intégration. Par défaut, :test_unit.
  • system_tests définit l'outil d'intégration à utiliser pour générer des tests système. Par défaut, :test_unit.
  • orm définit l'ORM à utiliser. Par défaut, false et utilisera Active Record par défaut.
  • resource_controller définit le générateur à utiliser pour générer un contrôleur lors de l'utilisation de bin/rails generate resource. Par défaut, :controller.
  • resource_route définit si une définition de route de ressource doit être générée ou non. Par défaut, true.
  • scaffold_controller différent de resource_controller, définit le générateur à utiliser pour générer un contrôleur scaffolded lors de l'utilisation de bin/rails generate scaffold. Par défaut, :scaffold_controller.
  • test_framework définit le framework de test à utiliser. Par défaut, false et utilisera minitest par défaut.
  • template_engine définit le moteur de template à utiliser, tel que ERB ou Haml. Par défaut, :erb.

3.5 Configuration des Middleware

Chaque application Rails est livrée avec un ensemble standard de middleware qu'elle utilise dans cet ordre dans l'environnement de développement :

3.5.1 ActionDispatch::HostAuthorization

Protège contre les attaques de rebinding DNS et autres attaques de l'en-tête Host. Il est inclus dans l'environnement de développement par défaut avec la configuration suivante :

Rails.application.config.hosts = [
  IPAddr.new("0.0.0.0/0"),        # Toutes les adresses IPv4.
  IPAddr.new("::/0"),             # Toutes les adresses IPv6.
  "localhost",                    # Le domaine réservé localhost.
  ENV["RAILS_DEVELOPMENT_HOSTS"]  # Hôtes supplémentaires séparés par des virgules pour le développement.
]

Dans d'autres environnements, Rails.application.config.hosts est vide et aucune vérification de l'en-tête Host ne sera effectuée. Si vous souhaitez vous protéger contre les attaques sur les en-têtes en production, vous devez manuellement autoriser les hôtes autorisés avec :

Rails.application.config.hosts << "product.com"

L'hôte d'une requête est vérifié par rapport aux entrées de hosts avec l'opérateur #===, ce qui permet à hosts de prendre en charge des entrées de type Regexp, Proc et IPAddr, pour n'en nommer que quelques-unes. Voici un exemple avec une expression régulière.

# Autoriser les requêtes à partir de sous-domaines comme `www.product.com` et
# `beta1.product.com`.
Rails.application.config.hosts << /.*\.product\.com/

L'expression régulière fournie sera enveloppée avec les ancres (\A et \z) de sorte qu'elle doit correspondre à l'ensemble du nom d'hôte. /product.com/, par exemple, une fois ancré, ne correspondrait pas à www.product.com.

Un cas spécial est pris en charge pour vous permettre d'autoriser tous les sous-domaines :

# Autoriser les requêtes à partir de sous-domaines comme `www.product.com` et
# `beta1.product.com`.
Rails.application.config.hosts << ".product.com"

Vous pouvez exclure certaines requêtes des vérifications d'autorisation d'hôte en définissant config.host_authorization.exclude :

# Exclure les requêtes pour le chemin /healthcheck/ de la vérification de l'hôte
Rails.application.config.host_authorization = {
  exclude: ->(request) { request.path.include?('healthcheck') }
}

Lorsqu'une requête est envoyée à un hôte non autorisé, une application Rack par défaut s'exécute et répond avec 403 Forbidden. Cela peut être personnalisé en définissant config.host_authorization.response_app. Par exemple :

Rails.application.config.host_authorization = {
  response_app: -> env do
    [400, { "Content-Type" => "text/plain" }, ["Bad Request"]]
  end
}

3.5.2 ActionDispatch::ServerTiming

Ajoute des métriques à l'en-tête Server-Timing pour être visualisées dans les outils de développement d'un navigateur.

3.5.3 ActionDispatch::SSL

Force chaque requête à être servie en utilisant HTTPS. Activé si config.force_ssl est défini sur true. Les options transmises à cela peuvent être configurées en définissant config.ssl_options.

3.5.4 ActionDispatch::Static

Est utilisé pour servir des ressources statiques. Désactivé si config.public_file_server.enabled est false. Définissez config.public_file_server.index_name si vous avez besoin de servir un fichier d'index de répertoire statique qui n'est pas nommé index. Par exemple, pour servir main.html au lieu de index.html pour les requêtes de répertoire, définissez config.public_file_server.index_name sur "main".

3.5.5 ActionDispatch::Executor

Permet le rechargement du code en toute sécurité. Désactivé si config.allow_concurrency est false, ce qui provoque le chargement de Rack::Lock. Rack::Lock enveloppe l'application dans un mutex afin qu'elle ne puisse être appelée que par un seul thread à la fois.

3.5.6 ActiveSupport::Cache::Strategy::LocalCache

Sert de cache basique en mémoire. Ce cache n'est pas thread-safe et est destiné uniquement à servir de cache mémoire temporaire pour un seul thread.

3.5.7 Rack::Runtime

Définit un en-tête X-Runtime, contenant le temps (en secondes) nécessaire pour exécuter la requête.

3.5.8 Rails::Rack::Logger

Informe les journaux que la requête a commencé. Une fois la requête terminée, tous les journaux sont vidés.

3.5.9 ActionDispatch::ShowExceptions

Récupère toute exception renvoyée par l'application et affiche de belles pages d'exception si la requête est locale ou si config.consider_all_requests_local est défini sur true. Si config.action_dispatch.show_exceptions est défini sur :none, les exceptions seront levées quoi qu'il en soit.

3.5.10 ActionDispatch::RequestId

Rend un en-tête X-Request-Id unique disponible dans la réponse et active la méthode ActionDispatch::Request#uuid. Configurable avec config.action_dispatch.request_id_header.

3.5.11 ActionDispatch::RemoteIp

Vérifie les attaques de falsification d'adresse IP et obtient l'IP client valide à partir des en-têtes de la requête. Configurable avec les options config.action_dispatch.ip_spoofing_check et config.action_dispatch.trusted_proxies.

3.5.12 Rack::Sendfile

Intercepte les réponses dont le corps est servi à partir d'un fichier et le remplace par un en-tête X-Sendfile spécifique au serveur. Configurable avec config.action_dispatch.x_sendfile_header.

3.5.13 ActionDispatch::Callbacks

Exécute les rappels de préparation avant de traiter la requête.

3.5.14 ActionDispatch::Cookies

Définit les cookies pour la requête.

3.5.15 ActionDispatch::Session::CookieStore

Est responsable de la sauvegarde de la session dans les cookies. Un middleware alternatif peut être utilisé en modifiant config.session_store.

3.5.16 ActionDispatch::Flash

Configure les clés flash. Disponible uniquement si config.session_store est défini sur une valeur.

3.5.17 Rack::MethodOverride

Permet de remplacer la méthode si params[:_method] est défini. Il s'agit du middleware qui prend en charge les types de méthode HTTP PATCH, PUT et DELETE.

3.5.18 Rack::Head

Convertit les requêtes HEAD en requêtes GET et les traite en conséquence.

3.5.19 Ajout de middleware personnalisé

En plus de ces middlewares habituels, vous pouvez ajouter les vôtres en utilisant la méthode config.middleware.use :

config.middleware.use Magical::Unicorns

Cela placera le middleware Magical::Unicorns à la fin de la pile. Vous pouvez utiliser insert_before si vous souhaitez ajouter un middleware avant un autre.

config.middleware.insert_before Rack::Head, Magical::Unicorns

Ou vous pouvez insérer un middleware à une position exacte en utilisant des index. Par exemple, si vous souhaitez insérer le middleware Magical::Unicorns en haut de la pile, vous pouvez le faire ainsi :

config.middleware.insert_before 0, Magical::Unicorns

Il y a aussi insert_after qui insérera un middleware après un autre :

config.middleware.insert_after Rack::Head, Magical::Unicorns

Les middlewares peuvent également être complètement remplacés par d'autres :

config.middleware.swap ActionController::Failsafe, Lifo::Failsafe

Les middlewares peuvent être déplacés d'un endroit à un autre :

config.middleware.move_before ActionDispatch::Flash, Magical::Unicorns

Cela déplacera le middleware Magical::Unicorns avant ActionDispatch::Flash. Vous pouvez également le déplacer après :

config.middleware.move_after ActionDispatch::Flash, Magical::Unicorns

Ils peuvent également être supprimés complètement de la pile :

config.middleware.delete Rack::MethodOverride

3.6 Configuration de i18n

Toutes ces options de configuration sont déléguées à la bibliothèque I18n.

3.6.1 config.i18n.available_locales

Définit les locales disponibles autorisées pour l'application. Par défaut, toutes les clés de locale trouvées dans les fichiers de locale, généralement uniquement :en dans une nouvelle application.

3.6.2 config.i18n.default_locale

Définit la locale par défaut d'une application utilisée pour i18n. Par défaut, :en.

3.6.3 config.i18n.enforce_available_locales

Veille à ce que toutes les locales passées par i18n doivent être déclarées dans la liste available_locales, en levant une exception I18n::InvalidLocale lors de la définition d'une locale non disponible. Par défaut, true. Il est recommandé de ne pas désactiver cette option sauf si cela est vraiment nécessaire, car cela fonctionne comme une mesure de sécurité contre la définition de locales invalides à partir de l'entrée utilisateur.

3.6.4 config.i18n.load_path

Définit le chemin utilisé par Rails pour rechercher les fichiers de locale. Par défaut, config/locales/**/*.{yml,rb}.

3.6.5 config.i18n.raise_on_missing_translations

Détermine si une erreur doit être levée pour les traductions manquantes. Par défaut, false.

3.6.6 config.i18n.fallbacks

Définit le comportement de repli pour les traductions manquantes. Voici 3 exemples d'utilisation de cette option :

  • Vous pouvez définir l'option sur true pour utiliser la locale par défaut comme repli, comme ceci :

    config.i18n.fallbacks = true
    
  • Ou vous pouvez définir un tableau de locales comme repli, comme ceci :

    config.i18n.fallbacks = [:tr, :en]
    
  • Ou vous pouvez définir des replis différents pour chaque locale individuellement. Par exemple, si vous souhaitez utiliser :tr pour :az et :de, :en pour :da comme replis, vous pouvez le faire ainsi :

    config.i18n.fallbacks = { az: :tr, da: [:de, :en] }
    #ou
    config.i18n.fallbacks.map = { az: :tr, da: [:de, :en] }
    

    Configuration d'Active Model

3.6.7 config.active_model.i18n_customize_full_message

Contrôle si le format Error#full_message peut être modifié dans un fichier de localisation i18n. Par défaut, il est réglé sur false.

Lorsqu'il est réglé sur true, full_message recherchera un format au niveau de l'attribut et du modèle dans les fichiers de localisation. Le format par défaut est "%{attribute} %{message}", où attribute est le nom de l'attribut et message est le message spécifique à la validation. L'exemple suivant remplace le format pour tous les attributs de Person, ainsi que le format pour un attribut spécifique de Person (age).

class Person
  include ActiveModel::Validations

  attr_accessor :name, :age

  validates :name, :age, presence: true
end
en:
  activemodel: # or activerecord:
    errors:
      models:
        person:
          # Remplace le format pour tous les attributs de Person :
          format: "Invalid %{attribute} (%{message})"
          attributes:
            age:
              # Remplace le format pour l'attribut age :
              format: "%{message}"
              blank: "Veuillez remplir votre %{attribute}"
irb> person = Person.new.tap(&:valid?)

irb> person.errors.full_messages
=> [
  "Invalid Name (can’t be blank)",
  "Veuillez remplir votre Age"
]

irb> person.errors.messages
=> {
  :name => ["can’t be blank"],
  :age  => ["Veuillez remplir votre Age"]
}

3.7 Configuration d'Active Record

config.active_record inclut une variété d'options de configuration :

3.7.1 config.active_record.logger

Accepte un enregistreur conforme à l'interface de Log4r ou à la classe de journalisation Ruby par défaut, qui est ensuite transmis à toutes les nouvelles connexions à la base de données. Vous pouvez récupérer cet enregistreur en appelant logger sur une classe de modèle Active Record ou sur une instance de modèle Active Record. Réglez-le sur nil pour désactiver la journalisation.

3.7.2 config.active_record.primary_key_prefix_type

Vous permet d'ajuster la dénomination des colonnes de clé primaire. Par défaut, Rails suppose que les colonnes de clé primaire sont nommées id (et cette option de configuration n'a pas besoin d'être définie). Il existe deux autres choix :

  • :table_name ferait de la clé primaire de la classe Customer customerid.
  • :table_name_with_underscore ferait de la clé primaire de la classe Customer customer_id.

3.7.3 config.active_record.table_name_prefix

Vous permet de définir une chaîne globale à préfixer aux noms de table. Si vous la définissez sur northwest_, alors la classe Customer recherchera northwest_customers comme table. La valeur par défaut est une chaîne vide.

3.7.4 config.active_record.table_name_suffix

Vous permet de définir une chaîne globale à ajouter aux noms de table. Si vous la définissez sur _northwest, alors la classe Customer recherchera customers_northwest comme table. La valeur par défaut est une chaîne vide.

3.7.5 config.active_record.schema_migrations_table_name

Vous permet de définir une chaîne à utiliser comme nom de la table des migrations de schéma.

3.7.6 config.active_record.internal_metadata_table_name

Vous permet de définir une chaîne à utiliser comme nom de la table des métadonnées internes.

3.7.7 config.active_record.protected_environments

Vous permet de définir un tableau de noms d'environnements où les actions destructrices doivent être interdites.

3.7.8 config.active_record.pluralize_table_names

Spécifie si Rails recherchera des noms de table au singulier ou au pluriel dans la base de données. Si elle est réglée sur true (la valeur par défaut), alors la classe Customer utilisera la table customers. Si elle est réglée sur false, alors la classe Customer utilisera la table customer.

3.7.9 config.active_record.default_timezone

Détermine si Time.local doit être utilisé (si réglé sur :local) ou Time.utc (si réglé sur :utc) lors de la récupération des dates et heures de la base de données. La valeur par défaut est :utc.

3.7.10 config.active_record.schema_format

Contrôle le format de sauvegarde du schéma de la base de données dans un fichier. Les options sont :ruby (par défaut) pour une version indépendante de la base de données qui dépend des migrations, ou :sql pour un ensemble d'instructions SQL (potentiellement dépendantes de la base de données).

3.7.11 config.active_record.error_on_ignored_order

Spécifie si une erreur doit être levée si l'ordre d'une requête est ignoré lors d'une requête groupée. Les options sont true (lever une erreur) ou false (avertir). La valeur par défaut est false.

3.7.12 config.active_record.timestamped_migrations

Contrôle si les migrations sont numérotées avec des entiers séquentiels ou avec des horodatages. La valeur par défaut est true, pour utiliser des horodatages, qui sont préférés s'il y a plusieurs développeurs travaillant sur la même application.

3.7.13 config.active_record.db_warnings_action

Contrôle l'action à prendre lorsqu'une requête SQL produit un avertissement. Les options suivantes sont disponibles :

  • :ignore - Les avertissements de la base de données seront ignorés. C'est la valeur par défaut.

  • :log - Les avertissements de la base de données seront enregistrés via ActiveRecord.logger au niveau :warn.

  • :raise - Les avertissements de la base de données seront levés en tant que ActiveRecord::SQLWarning.

  • :report - Les avertissements de la base de données seront signalés aux abonnés du rapporteur d'erreurs de Rails.

  • Proc personnalisé - Un proc personnalisé peut être fourni. Il doit accepter un objet d'erreur SQLWarning.

    Par exemple :

    config.active_record.db_warnings_action = ->(warning) do
      # Signaler à un service de rapport d'exceptions personnalisé
      Bugsnag.notify(warning.message) do |notification|
        notification.add_metadata(:warning_code, warning.code)
        notification.add_metadata(:warning_level, warning.level)
      end
    end
    

3.7.14 config.active_record.db_warnings_ignore

Spécifie une liste blanche de codes et de messages d'avertissement qui seront ignorés, quelle que soit l'action db_warnings_action configurée. Le comportement par défaut est de signaler tous les avertissements. Les avertissements à ignorer peuvent être spécifiés sous forme de chaînes de caractères ou de regex. Par exemple :

  config.active_record.db_warnings_action = :raise
  # Les avertissements suivants ne seront pas levés
  config.active_record.db_warnings_ignore = [
    /Invalid utf8mb4 character string/,
    "Un message d'avertissement exact",
    "1062", # Erreur MySQL 1062 : Entrée en double
  ]

3.7.15 config.active_record.migration_strategy

Contrôle la classe de stratégie utilisée pour exécuter les méthodes d'instructions de schéma dans une migration. La classe par défaut délègue à l'adaptateur de connexion. Les stratégies personnalisées doivent hériter de ActiveRecord::Migration::ExecutionStrategy, ou peuvent hériter de DefaultStrategy, qui préservera le comportement par défaut pour les méthodes qui ne sont pas implémentées :

class CustomMigrationStrategy < ActiveRecord::Migration::DefaultStrategy
  def drop_table(*)
    raise "La suppression de tables n'est pas prise en charge !"
  end
end

config.active_record.migration_strategy = CustomMigrationStrategy

3.7.16 config.active_record.lock_optimistically

Contrôle si Active Record utilisera le verrouillage optimiste et est true par défaut.

3.7.17 config.active_record.cache_timestamp_format

Contrôle le format de la valeur de l'horodatage dans la clé de cache. La valeur par défaut est :usec.

3.7.18 config.active_record.record_timestamps

Est une valeur booléenne qui contrôle si le marquage temporel des opérations create et update sur un modèle se produit ou non. La valeur par défaut est true.

3.7.19 config.active_record.partial_inserts

Est une valeur booléenne et contrôle si des écritures partielles sont utilisées lors de la création de nouveaux enregistrements (c'est-à-dire si les insertions ne définissent que les attributs différents de la valeur par défaut).

La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est
(originale) true
7.0 false

3.7.20 config.active_record.partial_updates

Est une valeur booléenne et contrôle si des écritures partielles sont utilisées lors de la mise à jour d'enregistrements existants (c'est-à-dire si les mises à jour ne définissent que les attributs modifiés). Notez que lors de l'utilisation de mises à jour partielles, vous devez également utiliser le verrouillage optimiste config.active_record.lock_optimistically, car des mises à jour concurrentes peuvent écrire des attributs basés sur un état de lecture potentiellement obsolète. La valeur par défaut est true.

3.7.21 config.active_record.maintain_test_schema

Est une valeur booléenne qui contrôle si Active Record doit essayer de maintenir à jour le schéma de votre base de données de test avec db/schema.rb (ou db/structure.sql) lorsque vous exécutez vos tests. La valeur par défaut est true.

3.7.22 config.active_record.dump_schema_after_migration

Est un indicateur qui contrôle si le schéma doit être exporté (db/schema.rb ou db/structure.sql) lors de l'exécution des migrations. Cela est défini sur false dans config/environments/production.rb qui est généré par Rails. La valeur par défaut est true si cette configuration n'est pas définie.

3.7.23 config.active_record.dump_schemas

Contrôle les schémas de base de données qui seront exportés lors de l'appel de db:schema:dump. Les options sont :schema_search_path (la valeur par défaut) qui exporte tous les schémas répertoriés dans schema_search_path, :all qui exporte toujours tous les schémas indépendamment de schema_search_path, ou une chaîne de schémas séparés par des virgules.

3.7.24 config.active_record.before_committed_on_all_records

Active les rappels before_committed! sur tous les enregistrements inscrits dans une transaction. Le comportement précédent était d'exécuter les rappels uniquement sur la première copie d'un enregistrement s'il y avait plusieurs copies du même enregistrement inscrites dans la transaction.

À partir de la version La valeur par défaut est
(original) false
7.1 true

3.7.25 config.active_record.belongs_to_required_by_default

Est une valeur booléenne qui contrôle si un enregistrement échoue à la validation si l'association belongs_to n'est pas présente.

La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est
(original) nil
5.0 true

3.7.26 config.active_record.belongs_to_required_validates_foreign_key

Active la validation uniquement des colonnes liées au parent pour vérifier leur présence lorsque le parent est obligatoire. Le comportement précédent était de valider la présence de l'enregistrement parent, ce qui effectuait une requête supplémentaire pour obtenir le parent à chaque fois que l'enregistrement enfant était mis à jour, même lorsque le parent n'avait pas changé.

À partir de la version La valeur par défaut est
(original) true
7.1 false

3.7.27 config.active_record.marshalling_format_version

Lorsqu'il est défini sur 7.1, permet une sérialisation plus efficace de l'instance Active Record avec Marshal.dump.

Cela modifie le format de sérialisation, de sorte que les modèles sérialisés de cette manière ne peuvent pas être lus par les anciennes versions (< 7.1) de Rails. Cependant, les messages qui utilisent l'ancien format peuvent toujours être lus, indépendamment de l'activation ou non de cette optimisation.

À partir de la version La valeur par défaut est
(original) 6.1
7.1 7.1

3.7.28 config.active_record.action_on_strict_loading_violation

Active le déclenchement ou l'enregistrement d'une exception si strict_loading est défini sur une association. La valeur par défaut est :raise dans tous les environnements. Elle peut être modifiée en :log pour envoyer les violations au journal au lieu de les déclencher.

3.7.29 config.active_record.strict_loading_by_default

Est une valeur booléenne qui active ou désactive le mode strict_loading par défaut. Par défaut, il est défini sur false.

3.7.30 config.active_record.warn_on_records_fetched_greater_than

Permet de définir un seuil d'avertissement pour la taille des résultats d'une requête. Si le nombre d'enregistrements renvoyés par une requête dépasse le seuil, un avertissement est enregistré. Cela peut être utilisé pour identifier les requêtes qui pourraient causer une surcharge mémoire.

3.7.31 config.active_record.index_nested_attribute_errors

Permet d'afficher les erreurs pour les relations has_many imbriquées avec un index en plus de l'erreur elle-même. Par défaut, cette option est définie sur false.

3.7.32 config.active_record.use_schema_cache_dump

Permet aux utilisateurs d'obtenir les informations du cache de schéma à partir de db/schema_cache.yml (généré par bin/rails db:schema:cache:dump), au lieu de devoir envoyer une requête à la base de données pour obtenir ces informations. Par défaut, la valeur est true.

3.7.33 config.active_record.cache_versioning

Indique s'il faut utiliser une méthode #cache_key stable accompagnée d'une version changeante dans la méthode #cache_version.

La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est
(originale) false
5.2 true

3.7.34 config.active_record.collection_cache_versioning

Permet de réutiliser la même clé de cache lorsque l'objet de type ActiveRecord::Relation en cache change en déplaçant les informations volatiles (mise à jour maximale et nombre) de la clé de cache de la relation dans la version du cache pour prendre en charge le recyclage de la clé de cache.

La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est
(originale) false
6.0 true

3.7.35 config.active_record.has_many_inversing

Permet de définir l'enregistrement inverse lors du parcours des associations belongs_to vers has_many.

La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est
(originale) false
6.1 true

3.7.36 config.active_record.automatic_scope_inversing

Permet de déduire automatiquement inverse_of pour les associations avec une portée.

La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est
(originale) false
7.0 true

3.7.37 config.active_record.destroy_association_async_job

Permet de spécifier le travail qui sera utilisé pour détruire les enregistrements associés en arrière-plan. Par défaut, il est défini sur ActiveRecord::DestroyAssociationAsyncJob.

3.7.38 config.active_record.destroy_association_async_batch_size

Permet de spécifier le nombre maximal d'enregistrements qui seront détruits dans un travail en arrière-plan par l'option d'association dependent: :destroy_async. Tout le reste étant égal, une taille de lot plus petite ajoutera plus de travaux en arrière-plan de courte durée, tandis qu'une taille de lot plus grande ajoutera moins de travaux en arrière-plan de longue durée. Cette option est définie par défaut sur nil, ce qui entraînera la destruction de tous les enregistrements dépendants pour une association donnée dans le même travail en arrière-plan.

3.7.39 config.active_record.queues.destroy

Permet de spécifier la file d'attente Active Job à utiliser pour les travaux de destruction. Lorsque cette option est nil, les travaux de purge sont envoyés à la file d'attente Active Job par défaut (voir config.active_job.default_queue_name). La valeur par défaut est nil.

3.7.40 config.active_record.enumerate_columns_in_select_statements

Lorsque cette option est true, inclut toujours les noms de colonnes dans les instructions SELECT et évite les requêtes SELECT * FROM ... avec des jokers. Cela évite les erreurs de cache des instructions préparées lors de l'ajout de colonnes à une base de données PostgreSQL, par exemple. La valeur par défaut est false.

3.7.41 config.active_record.verify_foreign_keys_for_fixtures

Vérifie que toutes les contraintes de clé étrangère sont valides après le chargement des jeux de données dans les tests. Pris en charge uniquement par PostgreSQL et SQLite.

La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est
(originale) false
7.0 true

3.7.42 config.active_record.raise_on_assign_to_attr_readonly

Permet de lever une exception lors de l'assignation à des attributs attr_readonly. Le comportement précédent permettait l'assignation mais ne persistait pas les modifications dans la base de données.

À partir de la version La valeur par défaut est
(originale) false
7.1 true

3.7.43 config.active_record.run_commit_callbacks_on_first_saved_instances_in_transaction

Lorsque plusieurs instances Active Record modifient le même enregistrement dans une transaction, Rails exécute les rappels after_commit ou after_rollback pour une seule d'entre elles. Cette option spécifie comment Rails choisit quelle instance reçoit les rappels.

Lorsque la valeur est true, les rappels transactionnels sont exécutés sur la première instance à être enregistrée, même si son état d'instance peut être obsolète.

Lorsque la valeur est false, les rappels transactionnels sont exécutés sur les instances ayant l'état d'instance le plus récent. Ces instances sont choisies comme suit :

  • En général, les rappels transactionnels sont exécutés sur la dernière instance à enregistrer un enregistrement donné dans la transaction.
  • Il existe deux exceptions :
    • Si l'enregistrement est créé dans la transaction, puis mis à jour par une autre instance, les rappels after_create_commit seront exécutés sur la deuxième instance. Cela remplace les rappels after_update_commit qui seraient naïvement exécutés en fonction de l'état de cette instance.
    • Si l'enregistrement est détruit dans la transaction, les rappels after_destroy_commit seront déclenchés sur la dernière instance détruite, même si une instance obsolète a ensuite effectué une mise à jour (qui n'aura affecté aucune ligne).

La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est
(originale) true
7.1 false

3.7.44 config.active_record.default_column_serializer

L'implémentation du sérialiseur à utiliser si aucune n'est spécifiée explicitement pour une colonne donnée.

Historiquement, serialize et store, tout en permettant d'utiliser des implémentations de sérialiseur alternatives, utilisaient YAML par défaut, mais ce n'est pas un format très efficace et peut être la source de vulnérabilités de sécurité s'il n'est pas utilisé avec précaution.

Il est donc recommandé de préférer des formats plus stricts et plus limités pour la sérialisation en base de données.

Malheureusement, il n'y a pas vraiment de valeurs par défaut adaptées disponibles dans la bibliothèque standard de Ruby. JSON pourrait fonctionner comme format, mais les gemmes json convertiront les types non pris en charge en chaînes, ce qui peut entraîner des bugs.

La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est
(originale) YAML
7.1 nil

3.7.45 config.active_record.run_after_transaction_callbacks_in_order_defined

Si la valeur est true, les rappels after_commit sont exécutés dans l'ordre où ils sont définis dans un modèle. Si la valeur est false, ils sont exécutés dans l'ordre inverse.

Tous les autres rappels sont toujours exécutés dans l'ordre où ils sont définis dans un modèle (sauf si vous utilisez prepend: true).

La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est
(originale) false
7.1 true

3.7.46 config.active_record.query_log_tags_enabled

Indique si les commentaires de requête au niveau de l'adaptateur doivent être activés ou non. Par défaut, la valeur est false.

NOTE : Lorsque cette valeur est définie sur true, les instructions préparées de la base de données seront automatiquement désactivées.

3.7.47 config.active_record.query_log_tags

Définit un Array spécifiant les balises clé/valeur à insérer dans un commentaire SQL. Par défaut, la valeur est [ :application ], une balise prédéfinie renvoyant le nom de l'application.

3.7.48 config.active_record.query_log_tags_format

Un Symbol spécifiant le formatteur à utiliser pour les balises. Les valeurs valides sont :sqlcommenter et :legacy.

La valeur par défaut dépend de la version cible de config.load_defaults : | À partir de la version | La valeur par défaut est | | --------------------- | -------------------- | | (original) | :legacy | | 7.1 | :sqlcommenter |

3.7.49 config.active_record.cache_query_log_tags

Spécifie si la mise en cache des balises de journal de requête doit être activée ou non. Pour les applications qui ont un grand nombre de requêtes, la mise en cache des balises de journal de requête peut offrir un avantage en termes de performances lorsque le contexte ne change pas pendant la durée de la requête ou de l'exécution de la tâche. Par défaut, la valeur est false.

3.7.50 config.active_record.schema_cache_ignored_tables

Définit la liste des tables qui doivent être ignorées lors de la génération du cache de schéma. Il accepte un Array de chaînes de caractères représentant les noms des tables, ou des expressions régulières.

3.7.51 config.active_record.verbose_query_logs

Spécifie si les emplacements sources des méthodes appelant des requêtes à la base de données doivent être enregistrés sous les requêtes pertinentes. Par défaut, le drapeau est true en développement et false dans tous les autres environnements.

3.7.52 config.active_record.sqlite3_adapter_strict_strings_by_default

Spécifie si le SQLite3Adapter doit être utilisé en mode strict pour les chaînes de caractères. L'utilisation d'un mode strict pour les chaînes de caractères désactive les littéraux de chaînes de caractères entre guillemets doubles.

SQLite a quelques particularités concernant les littéraux de chaînes de caractères entre guillemets doubles. Il essaie d'abord de considérer les chaînes de caractères entre guillemets doubles comme des noms d'identifiants, mais s'ils n'existent pas, il les considère ensuite comme des littéraux de chaînes de caractères. En raison de cela, les fautes de frappe peuvent passer inaperçues. Par exemple, il est possible de créer un index pour une colonne qui n'existe pas. Consultez la documentation SQLite pour plus de détails.

La valeur par défaut dépend de la version cible config.load_defaults :

À partir de la version La valeur par défaut est
(original) false
7.1 true

3.7.53 config.active_record.async_query_executor

Spécifie comment les requêtes asynchrones sont regroupées.

Par défaut, la valeur est nil, ce qui signifie que load_async est désactivé et que les requêtes sont exécutées directement en premier plan. Pour que les requêtes soient effectivement exécutées de manière asynchrone, il doit être défini sur :global_thread_pool ou :multi_thread_pool.

:global_thread_pool utilisera un seul pool pour toutes les bases de données auxquelles l'application se connecte. C'est la configuration préférée pour les applications n'ayant qu'une seule base de données, ou les applications qui ne requêtent qu'un seul fragment de base de données à la fois.

:multi_thread_pool utilisera un pool par base de données, et chaque taille de pool peut être configurée individuellement dans database.yml via les propriétés max_threads et min_thread. Cela peut être utile pour les applications qui requêtent régulièrement plusieurs bases de données en même temps et qui ont besoin de définir plus précisément la concurrence maximale.

3.7.54 config.active_record.global_executor_concurrency

Utilisé en conjonction avec config.active_record.async_query_executor = :global_thread_pool, définit combien de requêtes asynchrones peuvent être exécutées simultanément.

Par défaut, la valeur est 4.

Ce nombre doit être pris en compte en fonction de la taille du pool de connexions configuré dans database.yml. Le pool de connexions doit être suffisamment grand pour accueillir à la fois les threads en premier plan (par exemple, les threads du serveur web ou du travailleur de tâches) et les threads en arrière-plan.

3.7.55 config.active_record.allow_deprecated_singular_associations_name

Cela active le comportement déprécié selon lequel les associations singulières peuvent être référencées par leur nom pluriel dans les clauses where. Le paramètre false améliore les performances.

class Comment < ActiveRecord::Base
  belongs_to :post
end

Comment.where(post: post_id).count  # => 5

# Lorsque `allow_deprecated_singular_associations_name` est true :
Comment.where(posts: post_id).count # => 5 (avertissement de dépréciation)

# Lorsque `allow_deprecated_singular_associations_name` est false :
Comment.where(posts: post_id).count # => erreur

La valeur par défaut dépend de la version cible config.load_defaults : | À partir de la version | La valeur par défaut est | | --------------------- | -------------------- | | (original) | true | | 7.1 | false |

3.7.56 config.active_record.yaml_column_permitted_classes

Par défaut, [Symbol]. Permet aux applications d'inclure des classes supplémentaires autorisées à safe_load() sur ActiveRecord::Coders::YAMLColumn.

3.7.57 config.active_record.use_yaml_unsafe_load

Par défaut, false. Permet aux applications d'opter pour l'utilisation de unsafe_load sur ActiveRecord::Coders::YAMLColumn.

3.7.58 config.active_record.raise_int_wider_than_64bit

Par défaut, true. Détermine s'il faut lever une exception ou non lorsque l'adaptateur PostgreSQL reçoit un entier plus large que la représentation signée sur 64 bits.

3.7.59 ActiveRecord::ConnectionAdapters::Mysql2Adapter.emulate_booleans et ActiveRecord::ConnectionAdapters::TrilogyAdapter.emulate_booleans

Contrôle si l'adaptateur MySQL d'Active Record considérera toutes les colonnes tinyint(1) comme des booléens. Par défaut, true.

3.7.60 ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.create_unlogged_tables

Contrôle si les tables de base de données créées par PostgreSQL doivent être "non enregistrées", ce qui peut accélérer les performances mais augmente le risque de perte de données en cas de plantage de la base de données. Il est fortement recommandé de ne pas activer cette option en environnement de production. Par défaut, false dans tous les environnements.

Pour l'activer pour les tests :

# config/environments/test.rb

ActiveSupport.on_load(:active_record_postgresqladapter) do
  self.create_unlogged_tables = true
end

3.7.61 ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.datetime_type

Contrôle le type natif que l'adaptateur PostgreSQL d'Active Record doit utiliser lorsque vous appelez datetime dans une migration ou un schéma. Il prend un symbole qui doit correspondre à l'un des NATIVE_DATABASE_TYPES configurés. La valeur par défaut est :timestamp, ce qui signifie que t.datetime dans une migration créera une colonne "timestamp without time zone".

Pour utiliser "timestamp with time zone" :

# config/application.rb

ActiveSupport.on_load(:active_record_postgresqladapter) do
  self.datetime_type = :timestamptz
end

Vous devez exécuter bin/rails db:migrate pour reconstruire votre schema.rb si vous modifiez cela.

3.7.62 ActiveRecord::SchemaDumper.ignore_tables

Accepte un tableau de tables qui ne doivent pas être incluses dans un fichier de schéma généré.

3.7.63 ActiveRecord::SchemaDumper.fk_ignore_pattern

Permet de définir une expression régulière différente qui sera utilisée pour décider si le nom d'une clé étrangère doit être inclus dans le fichier db/schema.rb ou non. Par défaut, les noms de clés étrangères commençant par fk_rails_ ne sont pas exportés vers le dump de schéma de base de données. Par défaut, /^fk_rails_[0-9a-f]{10}$/.

3.7.64 config.active_record.encryption.hash_digest_class

Définit l'algorithme de hachage utilisé par Active Record Encryption.

La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est
(original) OpenSSL::Digest::SHA1
7.1 OpenSSL::Digest::SHA256

3.7.65 config.active_record.encryption.support_sha1_for_non_deterministic_encryption

Active la prise en charge du déchiffrement des données existantes chiffrées à l'aide d'une classe de hachage SHA-1. Lorsque la valeur est false, seule la classe de hachage configurée dans config.active_record.encryption.hash_digest_class est prise en charge.

La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est
(original) true
7.1 false

3.8 Configuration d'Action Controller

config.action_controller inclut plusieurs paramètres de configuration :

3.8.1 config.action_controller.asset_host

Définit l'hôte pour les ressources. Utile lorsque des CDN sont utilisés pour héberger les ressources plutôt que le serveur d'application lui-même. Vous ne devriez utiliser cela que si vous avez une configuration différente pour Action Mailer, sinon utilisez config.asset_host.

3.8.2 config.action_controller.perform_caching

Configure si l'application doit utiliser les fonctionnalités de mise en cache fournies par le composant Action Controller ou non. Défini sur false en environnement de développement, true en production. Si ce n'est pas spécifié, la valeur par défaut sera true.

3.8.3 config.action_controller.default_static_extension

Configure l'extension utilisée pour les pages mises en cache. Par défaut, .html.

3.8.4 config.action_controller.include_all_helpers

Configure si tous les helpers de vue sont disponibles partout ou sont limités au contrôleur correspondant. Si défini sur false, les méthodes de UsersHelper sont uniquement disponibles pour les vues rendues dans le cadre de UsersController. Si défini sur true, les méthodes de UsersHelper sont disponibles partout. Le comportement de configuration par défaut (lorsque cette option n'est pas explicitement définie sur true ou false) est que tous les helpers de vue sont disponibles pour chaque contrôleur.

3.8.5 config.action_controller.logger

Accepte un logger conforme à l'interface de Log4r ou à la classe de journalisation Ruby par défaut, qui est ensuite utilisé pour enregistrer des informations depuis Action Controller. Définissez-le sur nil pour désactiver la journalisation.

3.8.6 config.action_controller.request_forgery_protection_token

Définit le nom du paramètre de jeton pour RequestForgery. L'appel à protect_from_forgery le définit par défaut sur :authenticity_token.

3.8.7 config.action_controller.allow_forgery_protection

Active ou désactive la protection CSRF. Par défaut, cela est false dans l'environnement de test et true dans tous les autres environnements.

3.8.8 config.action_controller.forgery_protection_origin_check

Configure si l'en-tête HTTP Origin doit être vérifié par rapport à l'origine du site en tant que défense CSRF supplémentaire.

La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est
(original) false
5.0 true

3.8.9 config.action_controller.per_form_csrf_tokens

Configure si les jetons CSRF ne sont valides que pour la méthode/action pour laquelle ils ont été générés.

La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est
(original) false
5.0 true

3.8.10 config.action_controller.default_protect_from_forgery

Détermine si la protection contre les falsifications est ajoutée à ActionController::Base.

La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est
(original) false
5.2 true

3.8.11 config.action_controller.relative_url_root

Peut être utilisé pour indiquer à Rails que vous déployez dans un sous-répertoire (configuring.html#deploy-to-a-subdirectory-relative-url-root). La valeur par défaut est config.relative_url_root.

3.8.12 config.action_controller.permit_all_parameters

Définit tous les paramètres pour une affectation de masse comme étant autorisés par défaut. La valeur par défaut est false.

3.8.13 config.action_controller.action_on_unpermitted_parameters

Contrôle le comportement lorsque des paramètres qui ne sont pas explicitement autorisés sont trouvés. La valeur par défaut est :log dans les environnements de test et de développement, false sinon. Les valeurs possibles sont :

  • false pour ne prendre aucune action
  • :log pour émettre un événement ActiveSupport::Notifications.instrument sur le sujet unpermitted_parameters.action_controller et enregistrer au niveau DEBUG
  • :raise pour lever une exception ActionController::UnpermittedParameters

3.8.14 config.action_controller.always_permitted_parameters

Définit une liste de paramètres autorisés par défaut. Les valeurs par défaut sont ['controller', 'action'].

3.8.15 config.action_controller.enable_fragment_cache_logging

Détermine si les lectures et écritures de cache fragment doivent être journalisées de manière détaillée, comme suit :

Read fragment views/v1/2914079/v1/2914079/recordings/70182313-20160225015037000000/d0bdf2974e1ef6d31685c3b392ad0b74 (0.6ms)
Rendered messages/_message.html.erb in 1.2 ms [cache hit]
Write fragment views/v1/2914079/v1/2914079/recordings/70182313-20160225015037000000/3b4e249ac9d168c617e32e84b99218b5 (1.1ms)
Rendered recordings/threads/_thread.html.erb in 1.5 ms [cache miss]

Par défaut, il est défini sur false, ce qui donne la sortie suivante :

Rendered messages/_message.html.erb in 1.2 ms [cache hit]
Rendered recordings/threads/_thread.html.erb in 1.5 ms [cache miss]

3.8.16 config.action_controller.raise_on_open_redirects

Lève une ActionController::Redirecting::UnsafeRedirectError lorsqu'une redirection ouverte non autorisée se produit.

La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est
(original) false
7.0 true

3.8.17 config.action_controller.log_query_tags_around_actions

Détermine si le contexte du contrôleur pour les balises de requête sera automatiquement mis à jour via un around_filter. La valeur par défaut est true.

3.8.18 config.action_controller.wrap_parameters_by_default

Configure le ParamsWrapper pour envelopper les requêtes json par défaut.

La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est
(originale) false
7.0 true

3.8.19 ActionController::Base.wrap_parameters

Configure le ParamsWrapper. Cela peut être appelé au niveau supérieur ou sur des contrôleurs individuels.

3.8.20 config.action_controller.allow_deprecated_parameters_hash_equality

Contrôle le comportement de ActionController::Parameters#== avec des arguments Hash. La valeur du paramètre détermine si une instance de ActionController::Parameters est égale à un Hash équivalent.

La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est
(originale) true
7.1 false

3.9 Configuration de l'action Dispatch

3.9.1 config.action_dispatch.cookies_serializer

Spécifie quel sérialiseur utiliser pour les cookies. Accepte les mêmes valeurs que config.active_support.message_serializer, plus :hybrid qui est un alias pour :json_allow_marshal.

La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est
(originale) :marshal
7.0 :json

3.9.2 config.action_dispatch.debug_exception_log_level

Configure le niveau de journalisation utilisé par le middleware DebugExceptions lors de la journalisation des exceptions non capturées pendant les requêtes.

La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est
(originale) :fatal
7.1 :error

3.9.3 config.action_dispatch.default_headers

Est un hash avec les en-têtes HTTP qui sont définis par défaut dans chaque réponse.

La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est
(originale)
{
"X-Frame-Options" => "SAMEORIGIN",
"X-XSS-Protection" => "1; mode=block",
"X-Content-Type-Options" => "nosniff",
"X-Download-Options" => "noopen",
"X-Permitted-Cross-Domain-Policies" => "none",
"Referrer-Policy" => "strict-origin-when-cross-origin"
}
7.0
{
"X-Frame-Options" => "SAMEORIGIN",
"X-XSS-Protection" => "0",
"X-Content-Type-Options" => "nosniff",
"X-Download-Options" => "noopen",
"X-Permitted-Cross-Domain-Policies" => "none",
"Referrer-Policy" => "strict-origin-when-cross-origin"
}
7.1
{
"X-Frame-Options" => "SAMEORIGIN",
"X-XSS-Protection" => "0",
"X-Content-Type-Options" => "nosniff",
"X-Permitted-Cross-Domain-Policies" => "none",
"Referrer-Policy" => "strict-origin-when-cross-origin"
}

3.9.4 config.action_dispatch.default_charset

Spécifie l'ensemble de caractères par défaut pour tous les rendus. Par défaut, il est défini sur nil.

3.9.5 config.action_dispatch.tld_length

Définit la longueur du TLD (domaine de premier niveau) pour l'application. Par défaut, il est défini sur 1.

3.9.6 config.action_dispatch.ignore_accept_header

Est utilisé pour déterminer s'il faut ignorer les en-têtes acceptés d'une requête. Par défaut, il est défini sur false.

3.9.7 config.action_dispatch.x_sendfile_header

Spécifie l'en-tête X-Sendfile spécifique au serveur. Cela est utile pour l'envoi de fichiers accéléré à partir du serveur. Par exemple, il peut être défini sur 'X-Sendfile' pour Apache.

3.9.8 config.action_dispatch.http_auth_salt

Définit la valeur du sel d'authentification HTTP. Par défaut, il est défini sur 'http authentication'.

Définit la valeur du sel des cookies signés. Par défaut, il est défini sur 'signed cookie'.

Définit la valeur du sel des cookies chiffrés. Par défaut, il est défini sur 'encrypted cookie'.

Définit la valeur du sel des cookies signés et chiffrés. Par défaut, il est défini sur 'signed encrypted cookie'.

Définit le sel des cookies chiffrés et authentifiés. Par défaut, il est défini sur 'authenticated encrypted cookie'.

Définit le chiffre à utiliser pour les cookies chiffrés. Par défaut, il est défini sur "aes-256-gcm".

Définit le digest à utiliser pour les cookies signés. Par défaut, il s'agit de "SHA1".

3.9.15 config.action_dispatch.cookies_rotations

Permet de faire tourner les secrets, les chiffrements et les digests pour les cookies chiffrés et signés.

Contrôle si les cookies signés et chiffrés utilisent le chiffrement AES-256-GCM ou l'ancien chiffrement AES-256-CBC.

La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est
(originale) false
5.2 true

3.9.17 config.action_dispatch.use_cookies_with_metadata

Active l'écriture des cookies avec les métadonnées intégrées.

La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est
(originale) false
6.0 true

3.9.18 config.action_dispatch.perform_deep_munge

Configure si la méthode deep_munge doit être exécutée sur les paramètres. Voir Guide de sécurité pour plus d'informations. Par défaut, il est défini sur true.

3.9.19 config.action_dispatch.rescue_responses

Configure les exceptions qui sont assignées à un statut HTTP. Il accepte un hash et vous pouvez spécifier des paires exception/statut. Par défaut, cela est défini comme suit :

config.action_dispatch.rescue_responses = {
  'ActionController::RoutingError'
    => :not_found,
  'AbstractController::ActionNotFound'
    => :not_found,
  'ActionController::MethodNotAllowed'
    => :method_not_allowed,
  'ActionController::UnknownHttpMethod'
    => :method_not_allowed,
  'ActionController::NotImplemented'
    => :not_implemented,
  'ActionController::UnknownFormat'
    => :not_acceptable,
  'ActionController::InvalidAuthenticityToken'
    => :unprocessable_entity,
  'ActionController::InvalidCrossOriginRequest'
    => :unprocessable_entity,
  'ActionDispatch::Http::Parameters::ParseError'
    => :bad_request,
  'ActionController::BadRequest'
    => :bad_request,
  'ActionController::ParameterMissing'
    => :bad_request,
  'Rack::QueryParser::ParameterTypeError'
    => :bad_request,
  'Rack::QueryParser::InvalidParameterError'
    => :bad_request,
  'ActiveRecord::RecordNotFound'
    => :not_found,
  'ActiveRecord::StaleObjectError'
    => :conflict,
  'ActiveRecord::RecordInvalid'
    => :unprocessable_entity,
  'ActiveRecord::RecordNotSaved'
    => :unprocessable_entity
}

Toutes les exceptions qui ne sont pas configurées seront mappées sur une erreur interne du serveur 500.

3.9.20 config.action_dispatch.cookies_same_site_protection

Configure la valeur par défaut de l'attribut SameSite lors de la définition des cookies. Lorsqu'il est défini sur nil, l'attribut SameSite n'est pas ajouté. Pour permettre à la valeur de l'attribut SameSite d'être configurée dynamiquement en fonction de la requête, une procédure peut être spécifiée. Par exemple :

config.action_dispatch.cookies_same_site_protection = ->(request) do
  :strict unless request.user_agent == "TestAgent"
end

La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est
(originale) nil
6.1 :lax

3.9.21 config.action_dispatch.ssl_default_redirect_status

Configure le code de statut HTTP par défaut utilisé lors de la redirection des requêtes non GET/HEAD de HTTP vers HTTPS dans le middleware ActionDispatch::SSL.

La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est
(originale) 307
6.1 308

3.9.22 config.action_dispatch.log_rescued_responses

Active la journalisation des exceptions non gérées configurées dans rescue_responses. Par défaut, il est défini sur true.

3.9.23 ActionDispatch::Callbacks.before

Prend un bloc de code à exécuter avant la requête.

3.9.24 ActionDispatch::Callbacks.after

Prend un bloc de code à exécuter après la requête.

3.10 Configuration de Action View

config.action_view inclut un petit nombre de paramètres de configuration :

3.10.1 config.action_view.cache_template_loading

Contrôle si les templates doivent être rechargés à chaque requête ou non. Par défaut, il s'agit de !config.enable_reloading.

3.10.2 config.action_view.field_error_proc

Fournit un générateur HTML pour afficher les erreurs provenant d'Active Model. Le bloc est évalué dans le contexte d'un template Action View. La valeur par défaut est

Proc.new { |html_tag, instance| content_tag :div, html_tag, class: "field_with_errors" }

3.10.3 config.action_view.default_form_builder

Indique à Rails quel constructeur de formulaire utiliser par défaut. La valeur par défaut est ActionView::Helpers::FormBuilder. Si vous souhaitez que votre classe de constructeur de formulaire soit chargée après l'initialisation (afin qu'elle soit rechargée à chaque requête en développement), vous pouvez la passer en tant que String.

3.10.4 config.action_view.logger

Accepte un journal conforme à l'interface de Log4r ou à la classe de journalisation Ruby par défaut, qui est ensuite utilisé pour enregistrer des informations provenant de Action View. Défini sur nil pour désactiver la journalisation.

3.10.5 config.action_view.erb_trim_mode

Indique le mode de découpe à utiliser par ERB. Par défaut, il est défini sur '-', ce qui active la suppression des espaces et des sauts de ligne en fin de ligne lors de l'utilisation de <%= -%> ou <%= =%>. Consultez la documentation d'Erubis pour plus d'informations.

3.10.6 config.action_view.frozen_string_literal

Compile le modèle ERB avec le commentaire magique # frozen_string_literal: true, ce qui rend toutes les chaînes de caractères gelées et économise les allocations. Défini sur true pour l'activer pour toutes les vues.

3.10.7 config.action_view.embed_authenticity_token_in_remote_forms

Vous permet de définir le comportement par défaut de authenticity_token dans les formulaires avec remote: true. Par défaut, il est défini sur false, ce qui signifie que les formulaires distants n'incluront pas authenticity_token, ce qui est utile lorsque vous mettez en cache le formulaire. Les formulaires distants obtiennent l'authenticité à partir de la balise meta, donc l'incorporation est inutile à moins que vous ne preniez en charge les navigateurs sans JavaScript. Dans ce cas, vous pouvez soit passer authenticity_token: true en tant qu'option de formulaire, soit définir cette configuration sur true.

3.10.8 config.action_view.prefix_partial_path_with_controller_namespace

Détermine si les partiels sont recherchés dans un sous-répertoire dans les modèles rendus à partir de contrôleurs avec des espaces de noms. Par exemple, considérez un contrôleur nommé Admin::ArticlesController qui rend ce modèle :

<%= render @article %>

Le paramètre par défaut est true, ce qui utilise le partiel à /admin/articles/_article.erb. Si la valeur est définie sur false, cela rendrait /articles/_article.erb, ce qui est le même comportement que le rendu à partir d'un contrôleur sans espace de noms tel que ArticlesController.

3.10.9 config.action_view.automatically_disable_submit_tag

Détermine si submit_tag doit être automatiquement désactivé lors du clic, cela est défini par défaut sur true.

3.10.10 config.action_view.debug_missing_translation

Détermine s'il faut envelopper la clé de traduction manquante dans une balise <span> ou non. Cela est défini par défaut sur true.

3.10.11 config.action_view.form_with_generates_remote_forms

Détermine si form_with génère des formulaires distants ou non.

La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est
5.1 true
6.1 false

3.10.12 config.action_view.form_with_generates_ids

Détermine si form_with génère des identifiants sur les entrées.

La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est
(originale) false
5.2 true

3.10.13 config.action_view.default_enforce_utf8

Détermine si les formulaires sont générés avec une balise cachée qui force les anciennes versions d'Internet Explorer à soumettre des formulaires encodés en UTF-8.

La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est
(originale) true
6.0 false

3.10.14 config.action_view.image_loading

Spécifie une valeur par défaut pour l'attribut loading des balises <img> rendues par l'aide image_tag. Par exemple, lorsqu'il est défini sur "lazy", les balises <img> rendues par image_tag incluront loading="lazy", ce qui indique au navigateur d'attendre que l'image soit proche du viewport pour la charger. (Cette valeur peut toujours être remplacée par image en passant par exemple loading: "eager" à image_tag.) Par défaut, il est défini sur nil.

3.10.15 config.action_view.image_decoding

Spécifie une valeur par défaut pour l'attribut decoding des balises <img> rendues par l'aide image_tag. Par défaut, il est défini sur nil.

3.10.16 config.action_view.annotate_rendered_view_with_filenames

Détermine si les vues rendues doivent être annotées avec les noms des fichiers de modèle. La valeur par défaut est false.

Détermine si javascript_include_tag et stylesheet_link_tag généreront un en-tête Link qui précharge les ressources.

La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est
(originale) nil
6.1 true

3.10.18 config.action_view.button_to_generates_button_tag

Détermine si button_to rendra l'élément <button>, indépendamment du fait que le contenu soit passé en tant que premier argument ou en tant que bloc.

La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est
(originale) false
7.0 true

3.10.19 config.action_view.apply_stylesheet_media_default

Détermine si stylesheet_link_tag rendra screen comme valeur par défaut pour l'attribut media lorsqu'il n'est pas fourni.

La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est
(originale) true
7.0 false

3.10.20 config.action_view.prepend_content_exfiltration_prevention

Détermine si les helpers form_tag et button_to généreront des balises HTML précédées d'un HTML sûr pour le navigateur (mais techniquement invalide) qui garantit que leur contenu ne peut pas être capturé par des balises non fermées précédentes. La valeur par défaut est false.

3.10.21 config.action_view.sanitizer_vendor

Configure l'ensemble des sanitizers HTML utilisés par Action View en définissant ActionView::Helpers::SanitizeHelper.sanitizer_vendor. La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est Qui analyse le balisage comme
(originale) Rails::HTML4::Sanitizer HTML4
7.1 Rails::HTML5::Sanitizer (voir NOTE) HTML5

NOTE : Rails::HTML5::Sanitizer n'est pas pris en charge sur JRuby, donc sur les plates-formes JRuby, Rails utilisera Rails::HTML4::Sanitizer.

3.11 Configuration d'Action Mailbox

config.action_mailbox propose les options de configuration suivantes :

3.11.1 config.action_mailbox.logger

Contient le journal utilisé par Action Mailbox. Il accepte un journal conforme à l'interface de Log4r ou à la classe de journalisation Ruby par défaut. La valeur par défaut est Rails.logger.

config.action_mailbox.logger = ActiveSupport::Logger.new(STDOUT)

3.11.2 config.action_mailbox.incinerate_after

Accepte une ActiveSupport::Duration indiquant combien de temps après le traitement les enregistrements ActionMailbox::InboundEmail doivent être détruits. La valeur par défaut est 30.days.

# Détruire les e-mails entrants 14 jours après le traitement.
config.action_mailbox.incinerate_after = 14.days

3.11.3 config.action_mailbox.queues.incineration

Accepte un symbole indiquant la file d'attente Active Job à utiliser pour les tâches d'incinération. Lorsque cette option est nil, les tâches d'incinération sont envoyées à la file d'attente Active Job par défaut (voir config.active_job.default_queue_name).

La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est
(originale) :action_mailbox_incineration
6.1 nil

3.11.4 config.action_mailbox.queues.routing

Accepte un symbole indiquant la file d'attente Active Job à utiliser pour les tâches de routage. Lorsque cette option est nil, les tâches de routage sont envoyées à la file d'attente Active Job par défaut (voir config.active_job.default_queue_name).

La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est
(originale) :action_mailbox_routing
6.1 nil

3.11.5 config.action_mailbox.storage_service

Accepte un symbole indiquant le service Active Storage à utiliser pour télécharger les e-mails. Lorsque cette option est nil, les e-mails sont téléchargés sur le service Active Storage par défaut (voir config.active_storage.service).

3.12 Configuration d'Action Mailer

Il existe plusieurs paramètres disponibles sur config.action_mailer :

3.12.1 config.action_mailer.asset_host

Définit l'hôte pour les ressources. Utile lorsque des CDN sont utilisés pour héberger les ressources plutôt que le serveur d'application lui-même. Vous ne devriez utiliser cela que si vous avez une configuration différente pour Action Controller, sinon utilisez config.asset_host.

3.12.2 config.action_mailer.logger

Accepte un journal conforme à l'interface de Log4r ou à la classe de journalisation Ruby par défaut, qui est ensuite utilisé pour enregistrer des informations provenant d'Action Mailer. Définissez-le sur nil pour désactiver la journalisation.

3.12.3 config.action_mailer.smtp_settings

Permet une configuration détaillée pour la méthode de livraison :smtp. Il accepte un hachage d'options, qui peut inclure l'une de ces options :

  • :address - Vous permet d'utiliser un serveur de messagerie distant. Modifiez simplement sa valeur par défaut "localhost".
  • :port - Au cas où votre serveur de messagerie ne fonctionnerait pas sur le port 25, vous pouvez le modifier.
  • :domain - Si vous devez spécifier un domaine HELO, vous pouvez le faire ici.
  • :user_name - Si votre serveur de messagerie nécessite une authentification, définissez le nom d'utilisateur dans ce paramètre.
  • :password - Si votre serveur de messagerie nécessite une authentification, définissez le mot de passe dans ce paramètre.
  • :authentication - Si votre serveur de messagerie nécessite une authentification, vous devez spécifier le type d'authentification ici. Il s'agit d'un symbole et l'un des :plain, :login, :cram_md5.
  • :enable_starttls - Utilise STARTTLS lors de la connexion à votre serveur SMTP et échoue si ce n'est pas pris en charge. Par défaut, il est défini sur false.
  • :enable_starttls_auto - Détecte si STARTTLS est activé sur votre serveur SMTP et commence à l'utiliser. Par défaut, il est défini sur true.
  • :openssl_verify_mode - Lors de l'utilisation de TLS, vous pouvez définir comment OpenSSL vérifie le certificat. Cela est utile si vous devez valider un certificat auto-signé et/ou un certificat générique. Cela peut être l'une des constantes de vérification OpenSSL, :none ou :peer -- ou la constante directement OpenSSL::SSL::VERIFY_NONE ou OpenSSL::SSL::VERIFY_PEER, respectivement.
  • :ssl/:tls - Active la connexion SMTP pour utiliser SMTP/TLS (SMTPS : connexion SMTP sur TLS directe).
  • :open_timeout - Nombre de secondes à attendre lors de la tentative d'ouverture d'une connexion.
  • :read_timeout - Nombre de secondes à attendre jusqu'à l'expiration d'un appel à read(2).

De plus, il est possible de transmettre n'importe quelle option de configuration que Mail::SMTP respecte.

3.12.4 config.action_mailer.smtp_timeout

Permet de configurer à la fois les valeurs :open_timeout et :read_timeout pour la méthode de livraison :smtp.

La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est
(originale) nil
7.0 5

3.12.5 config.action_mailer.sendmail_settings

Permet une configuration détaillée pour la méthode de livraison sendmail. Il accepte un hachage d'options, qui peut inclure l'une de ces options :

  • :location - L'emplacement de l'exécutable sendmail. Par défaut, /usr/sbin/sendmail.
  • :arguments - Les arguments de la ligne de commande. Par défaut, %w[ -i ].

3.12.6 config.action_mailer.raise_delivery_errors

Spécifie s'il faut générer une erreur si la livraison de l'e-mail ne peut pas être effectuée. Par défaut, il est défini sur true.

3.12.7 config.action_mailer.delivery_method

Définit la méthode de livraison et est par défaut :smtp. Voir la section de configuration dans le guide Action Mailer pour plus d'informations.

3.12.8 config.action_mailer.perform_deliveries

Spécifie si le courrier sera réellement livré et est par défaut true. Il peut être pratique de le définir sur false pour les tests.

3.12.9 config.action_mailer.default_options

Configure les options par défaut d'Action Mailer. Utilisez-le pour définir des options telles que from ou reply_to pour chaque expéditeur. Par défaut, ils sont définis comme suit:

mime_version:  "1.0",
charset:       "UTF-8",
content_type: "text/plain",
parts_order:  ["text/plain", "text/enriched", "text/html"]

Attribuez un hash pour définir des options supplémentaires:

config.action_mailer.default_options = {
  from: "[email protected]"
}

3.12.10 config.action_mailer.observers

Enregistre les observateurs qui seront notifiés lorsque le courrier est livré.

config.action_mailer.observers = ["MailObserver"]

3.12.11 config.action_mailer.interceptors

Enregistre les intercepteurs qui seront appelés avant l'envoi du courrier.

config.action_mailer.interceptors = ["MailInterceptor"]

3.12.12 config.action_mailer.preview_interceptors

Enregistre les intercepteurs qui seront appelés avant la prévisualisation du courrier.

config.action_mailer.preview_interceptors = ["MyPreviewMailInterceptor"]

3.12.13 config.action_mailer.preview_paths

Spécifie les emplacements des prévisualisations de courrier. L'ajout de chemins à cette option de configuration permettra d'utiliser ces chemins dans la recherche des prévisualisations de courrier.

config.action_mailer.preview_paths << "#{Rails.root}/lib/mailer_previews"

3.12.14 config.action_mailer.show_previews

Active ou désactive les prévisualisations de courrier. Par défaut, cela est true en développement.

config.action_mailer.show_previews = false

3.12.15 config.action_mailer.perform_caching

Spécifie si les modèles de courrier doivent effectuer une mise en cache des fragments ou non. Si cela n'est pas spécifié, la valeur par défaut sera true.

3.12.16 config.action_mailer.deliver_later_queue_name

Spécifie la file d'attente Active Job à utiliser pour le travail de livraison par défaut (voir config.action_mailer.delivery_job). Lorsque cette option est définie sur nil, les travaux de livraison sont envoyés à la file d'attente Active Job par défaut (voir config.active_job.default_queue_name).

Les classes de courrier peuvent remplacer cela pour utiliser une file d'attente différente. Notez que cela s'applique uniquement lorsque le travail de livraison par défaut est utilisé. Si votre expéditeur de courrier utilise un travail personnalisé, sa file d'attente sera utilisée.

Assurez-vous que votre adaptateur Active Job est également configuré pour traiter la file d'attente spécifiée, sinon les travaux de livraison peuvent être ignorés silencieusement.

La valeur par défaut dépend de la version cible de config.load_defaults:

À partir de la version La valeur par défaut est
(originale) :mailers
6.1 nil

3.12.17 config.action_mailer.delivery_job

Spécifie le travail de livraison pour le courrier.

La valeur par défaut dépend de la version cible de config.load_defaults:

À partir de la version La valeur par défaut est
(originale) ActionMailer::MailDeliveryJob
6.0 "ActionMailer::MailDeliveryJob"

3.13 Configuration d'Active Support

Il existe quelques options de configuration disponibles dans Active Support:

3.13.1 config.active_support.bare

Active ou désactive le chargement de active_support/all lors du démarrage de Rails. Par défaut, cela est nil, ce qui signifie que active_support/all est chargé.

3.13.2 config.active_support.test_order

Définit l'ordre dans lequel les cas de test sont exécutés. Les valeurs possibles sont :random et :sorted. Par défaut, cela est :random.

3.13.3 config.active_support.escape_html_entities_in_json

Active ou désactive l'échappement des entités HTML dans la sérialisation JSON. Par défaut, cela est true.

3.13.4 config.active_support.use_standard_json_time_format

Active ou désactive la sérialisation des dates au format ISO 8601. Par défaut, cela est true.

3.13.5 config.active_support.time_precision

Définit la précision des valeurs de temps encodées en JSON. Par défaut, cela est 3.

3.13.6 config.active_support.hash_digest_class

Permet de configurer la classe de hachage à utiliser pour générer des hachages non sensibles, tels que l'en-tête ETag.

La valeur par défaut dépend de la version cible de config.load_defaults: | À partir de la version | La valeur par défaut est | | --------------------- | -------------------- | | (original) | OpenSSL::Digest::MD5 | | 5.2 | OpenSSL::Digest::SHA1 | | 7.0 | OpenSSL::Digest::SHA256 |

3.13.7 config.active_support.key_generator_hash_digest_class

Permet de configurer la classe de hachage à utiliser pour dériver des secrets à partir de la base de secret configurée, par exemple pour les cookies chiffrés.

La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est
(original) OpenSSL::Digest::SHA1
7.0 OpenSSL::Digest::SHA256

3.13.8 config.active_support.use_authenticated_message_encryption

Spécifie si l'on doit utiliser le chiffrement authentifié AES-256-GCM comme chiffre par défaut pour chiffrer les messages au lieu de AES-256-CBC.

La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est
(original) false
5.2 true

3.13.9 config.active_support.message_serializer

Spécifie le sérialiseur par défaut utilisé par les instances de ActiveSupport::MessageEncryptor et ActiveSupport::MessageVerifier. Pour faciliter la migration entre les sérialiseurs, les sérialiseurs fournis incluent un mécanisme de secours pour prendre en charge plusieurs formats de désérialisation :

Sérialiseur Sérialiser et désérialiser Désérialisation de secours
:marshal Marshal ActiveSupport::JSON, ActiveSupport::MessagePack
:json ActiveSupport::JSON ActiveSupport::MessagePack
:json_allow_marshal ActiveSupport::JSON ActiveSupport::MessagePack, Marshal
:message_pack ActiveSupport::MessagePack ActiveSupport::JSON
:message_pack_allow_marshal ActiveSupport::MessagePack ActiveSupport::JSON, Marshal

AVERTISSEMENT : Marshal est un vecteur potentiel pour les attaques de désérialisation dans les cas où un secret de signature de message a été divulgué. Si possible, choisissez un sérialiseur qui ne prend pas en charge Marshal.

INFO : Les sérialiseurs :message_pack et :message_pack_allow_marshal prennent en charge le roundtripping de certains types Ruby qui ne sont pas pris en charge par JSON, tels que Symbol. Ils peuvent également offrir des performances améliorées et des tailles de charge utile plus petites. Cependant, ils nécessitent le gem msgpack.

Chacun des sérialiseurs ci-dessus émettra une notification d'événement message_serializer_fallback.active_support lorsqu'il bascule vers un format de désérialisation alternatif, ce qui vous permet de suivre la fréquence de ces basculements.

Alternativement, vous pouvez spécifier n'importe quel objet sérialiseur qui répond aux méthodes dump et load. Par exemple :

config.active_job.message_serializer = YAML

La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est
(original) :marshal
7.1 :json_allow_marshal

3.13.10 config.active_support.use_message_serializer_for_metadata

Lorsque défini sur true, active une optimisation de performance qui sérialise les données de message et les métadonnées ensemble. Cela modifie le format du message, de sorte que les messages sérialisés de cette manière ne peuvent pas être lus par les anciennes versions (< 7.1) de Rails. Cependant, les messages qui utilisent l'ancien format peuvent toujours être lus, indépendamment de l'activation ou non de cette optimisation.

La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est
(original) false
7.1 true

3.13.11 config.active_support.cache_format_version

Spécifie le format de sérialisation à utiliser pour le cache. Les valeurs possibles sont 6.1, 7.0 et 7.1.

Les formats 6.1, 7.0 et 7.1 utilisent tous Marshal pour le codeur par défaut, mais 7.0 utilise une représentation plus efficace pour les entrées de cache et 7.1 inclut une optimisation supplémentaire pour les valeurs de chaîne brute telles que les fragments de vue. Tous les formats sont rétrocompatibles, ce qui signifie que les entrées de cache écrites dans un format peuvent être lues lors de l'utilisation d'un autre format. Ce comportement facilite la migration entre les formats sans invalider l'ensemble du cache.

La valeur par défaut dépend de la version cible config.load_defaults :

À partir de la version La valeur par défaut est
(originale) 6.1
7.0 7.0
7.1 7.1

3.13.12 config.active_support.deprecation

Configure le comportement des avertissements de dépréciation. Les options sont :raise, :stderr, :log, :notify et :silence.

Dans les fichiers config/environments générés par défaut, cela est défini sur :log pour le développement et :stderr pour les tests, et il est omis pour la production au profit de config.active_support.report_deprecations.

3.13.13 config.active_support.disallowed_deprecation

Configure le comportement des avertissements de dépréciation interdits. Les options sont :raise, :stderr, :log, :notify et :silence.

Dans les fichiers config/environments générés par défaut, cela est défini sur :raise pour le développement et les tests, et il est omis pour la production au profit de config.active_support.report_deprecations.

3.13.14 config.active_support.disallowed_deprecation_warnings

Configure les avertissements de dépréciation que l'application considère comme interdits. Cela permet, par exemple, de traiter des dépréciations spécifiques comme des échecs graves.

3.13.15 config.active_support.report_deprecations

Lorsque false, désactive tous les avertissements de dépréciation, y compris les dépréciations interdites, provenant des dépréciateurs de l'application. Cela inclut toutes les dépréciations de Rails et d'autres gemmes qui peuvent ajouter leur dépréciateur à la collection de dépréciateurs, mais peut ne pas empêcher tous les avertissements de dépréciation émis par ActiveSupport::Deprecation.

Dans les fichiers config/environments générés par défaut, cela est défini sur false pour la production.

3.13.16 config.active_support.isolation_level

Configure la localité de la plupart de l'état interne de Rails. Si vous utilisez un serveur ou un processeur de tâches basé sur les fibres (par exemple, falcon), vous devez le définir sur :fiber. Sinon, il est préférable d'utiliser la localité :thread. Par défaut, il est défini sur :thread.

3.13.17 config.active_support.executor_around_test_case

Configure la suite de tests pour appeler Rails.application.executor.wrap autour des cas de test. Cela permet aux cas de test de se comporter plus près d'une requête ou d'une tâche réelle. Plusieurs fonctionnalités normalement désactivées en test, telles que le cache de requêtes Active Record et les requêtes asynchrones, seront alors activées.

La valeur par défaut dépend de la version cible config.load_defaults :

À partir de la version La valeur par défaut est
(originale) false
7.0 true

3.13.18 ActiveSupport::Logger.silencer

Est défini sur false pour désactiver la possibilité de désactiver les journaux dans un bloc. La valeur par défaut est true.

3.13.19 ActiveSupport::Cache::Store.logger

Spécifie le journal à utiliser dans les opérations de stockage du cache.

3.13.20 ActiveSupport.to_time_preserves_timezone

Spécifie si les méthodes to_time préservent le décalage UTC de leurs récepteurs. Si false, les méthodes to_time convertiront en utilisant le décalage UTC du système local.

La valeur par défaut dépend de la version cible config.load_defaults :

À partir de la version La valeur par défaut est
(originale) false
5.0 true

3.13.21 ActiveSupport.utc_to_local_returns_utc_offset_times

Configure ActiveSupport::TimeZone.utc_to_local pour renvoyer une heure avec un décalage UTC au lieu d'une heure UTC incorporant ce décalage.

La valeur par défaut dépend de la version cible config.load_defaults :

À partir de la version La valeur par défaut est
(originale) false
6.1 true

3.13.22 config.active_support.raise_on_invalid_cache_expiration_time

Spécifie si une ArgumentError doit être levée si Rails.cache fetch ou write reçoivent une valeur invalide pour expires_at ou expires_in.

Les options sont true et false. Si false, l'exception sera signalée comme gérée et enregistrée.

La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est
(originale) false
7.1 true

3.14 Configuration d'Active Job

config.active_job propose les options de configuration suivantes :

3.14.1 config.active_job.queue_adapter

Définit l'adaptateur pour le backend de mise en file d'attente. L'adaptateur par défaut est :async. Pour obtenir une liste à jour des adaptateurs intégrés, consultez la documentation de l'API ActiveJob::QueueAdapters.

# Assurez-vous d'avoir le gem de l'adaptateur dans votre Gemfile
# et suivez les instructions d'installation et de déploiement spécifiques à l'adaptateur.
config.active_job.queue_adapter = :sidekiq

3.14.2 config.active_job.default_queue_name

Peut être utilisé pour changer le nom de file d'attente par défaut. Par défaut, il s'agit de "default".

config.active_job.default_queue_name = :medium_priority

3.14.3 config.active_job.queue_name_prefix

Vous permet de définir un préfixe de nom de file d'attente optionnel et non vide pour tous les jobs. Par défaut, il est vide et n'est pas utilisé.

La configuration suivante placerait le job donné dans la file d'attente production_high_priority lorsqu'il est exécuté en production :

config.active_job.queue_name_prefix = Rails.env
class GuestsCleanupJob < ActiveJob::Base
  queue_as :high_priority
  #....
end

3.14.4 config.active_job.queue_name_delimiter

A une valeur par défaut de '_'. Si queue_name_prefix est défini, alors queue_name_delimiter joint le préfixe et le nom de file d'attente non préfixé.

La configuration suivante placerait le job fourni dans la file d'attente video_server.low_priority :

# le préfixe doit être défini pour que le délimiteur soit utilisé
config.active_job.queue_name_prefix = 'video_server'
config.active_job.queue_name_delimiter = '.'
class EncoderJob < ActiveJob::Base
  queue_as :low_priority
  #....
end

3.14.5 config.active_job.logger

Accepte un logger conforme à l'interface de Log4r ou à la classe de journalisation par défaut de Ruby, qui est ensuite utilisé pour enregistrer des informations provenant d'Active Job. Vous pouvez récupérer ce logger en appelant logger sur une classe Active Job ou une instance Active Job. Définissez-le sur nil pour désactiver l'enregistrement.

3.14.6 config.active_job.custom_serializers

Permet de définir des sérialiseurs d'arguments personnalisés. Par défaut, il est défini sur [].

3.14.7 config.active_job.log_arguments

Contrôle si les arguments d'un job sont enregistrés. Par défaut, il est défini sur true.

3.14.8 config.active_job.verbose_enqueue_logs

Spécifie si les emplacements sources des méthodes qui mettent en file d'attente des jobs en arrière-plan doivent être enregistrés sous les lignes de journalisation d'enfilement pertinentes. Par défaut, le drapeau est true en développement et false dans tous les autres environnements.

3.14.9 config.active_job.retry_jitter

Contrôle la quantité de "jitter" (variation aléatoire) appliquée au temps de retard calculé lors de la répétition des jobs échoués.

La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est
(originale) 0.0
6.1 0.15

3.14.10 config.active_job.log_query_tags_around_perform

Détermine si le contexte du job pour les balises de requête sera automatiquement mis à jour via un around_perform. La valeur par défaut est true.

3.14.11 config.active_job.use_big_decimal_serializer

Active le nouveau sérialiseur d'arguments BigDecimal, qui garantit la réversibilité. Sans ce sérialiseur, certains adaptateurs de file d'attente peuvent sérialiser les arguments BigDecimal sous forme de chaînes simples (non réversibles).

AVERTISSEMENT : Lors du déploiement d'une application avec plusieurs répliques, les anciennes répliques (antérieures à Rails 7.1) ne pourront pas désérialiser les arguments BigDecimal de ce sérialiseur. Par conséquent, ce paramètre ne doit être activé qu'après la mise à niveau réussie de toutes les répliques vers Rails 7.1. La valeur par défaut dépend de la version cible config.load_defaults :

À partir de la version La valeur par défaut est
(originale) false
7.1 true

3.15 Configuration d'Action Cable

3.15.1 config.action_cable.url

Accepte une chaîne de caractères pour l'URL où vous hébergez votre serveur Action Cable. Vous utiliseriez cette option si vous exécutez des serveurs Action Cable séparés de votre application principale.

3.15.2 config.action_cable.mount_path

Accepte une chaîne de caractères pour monter Action Cable, en tant que partie du processus du serveur principal. Par défaut, il est défini sur /cable. Vous pouvez le définir sur nil pour ne pas monter Action Cable en tant que partie de votre serveur Rails normal.

Vous pouvez trouver plus d'options de configuration détaillées dans la Vue d'ensemble d'Action Cable.

3.15.3 config.action_cable.precompile_assets

Détermine si les ressources Action Cable doivent être ajoutées à la précompilation de la pipeline des ressources. Cela n'a aucun effet si Sprockets n'est pas utilisé. La valeur par défaut est true.

3.16 Configuration d'Active Storage

config.active_storage fournit les options de configuration suivantes :

3.16.1 config.active_storage.variant_processor

Accepte un symbole :mini_magick ou :vips, spécifiant si les transformations de variantes et l'analyse des blobs seront effectuées avec MiniMagick ou ruby-vips.

La valeur par défaut dépend de la version cible config.load_defaults :

À partir de la version La valeur par défaut est
(originale) :mini_magick
7.0 :vips

3.16.2 config.active_storage.analyzers

Accepte un tableau de classes indiquant les analyseurs disponibles pour les blobs Active Storage. Par défaut, cela est défini comme suit :

config.active_storage.analyzers = [ActiveStorage::Analyzer::ImageAnalyzer::Vips, ActiveStorage::Analyzer::ImageAnalyzer::ImageMagick, ActiveStorage::Analyzer::VideoAnalyzer, ActiveStorage::Analyzer::AudioAnalyzer]

Les analyseurs d'images peuvent extraire la largeur et la hauteur d'un blob d'image ; l'analyseur vidéo peut extraire la largeur, la hauteur, la durée, l'angle, le rapport d'aspect et la présence/absence des canaux vidéo/audio d'un blob vidéo ; l'analyseur audio peut extraire la durée et le débit binaire d'un blob audio.

3.16.3 config.active_storage.previewers

Accepte un tableau de classes indiquant les visualiseurs d'images disponibles dans les blobs Active Storage. Par défaut, cela est défini comme suit :

config.active_storage.previewers = [ActiveStorage::Previewer::PopplerPDFPreviewer, ActiveStorage::Previewer::MuPDFPreviewer, ActiveStorage::Previewer::VideoPreviewer]

PopplerPDFPreviewer et MuPDFPreviewer peuvent générer une vignette à partir de la première page d'un blob PDF ; VideoPreviewer à partir de la trame pertinente d'un blob vidéo.

3.16.4 config.active_storage.paths

Accepte un hash d'options indiquant les emplacements des commandes de visualiseur/analyseur. Par défaut, il est défini sur {}, ce qui signifie que les commandes seront recherchées dans le chemin par défaut. Peut inclure l'une de ces options :

  • :ffprobe - L'emplacement de l'exécutable ffprobe.
  • :mutool - L'emplacement de l'exécutable mutool.
  • :ffmpeg - L'emplacement de l'exécutable ffmpeg.
config.active_storage.paths[:ffprobe] = '/usr/local/bin/ffprobe'

3.16.5 config.active_storage.variable_content_types

Accepte un tableau de chaînes indiquant les types de contenu que Active Storage peut transformer via le processeur de variantes. Par défaut, cela est défini comme suit :

config.active_storage.variable_content_types = %w(image/png image/gif image/jpeg image/tiff image/bmp image/vnd.adobe.photoshop image/vnd.microsoft.icon image/webp image/avif image/heic image/heif)

3.16.6 config.active_storage.web_image_content_types

Accepte un tableau de chaînes considérées comme des types de contenu d'images web dans lesquels les variantes peuvent être traitées sans être converties au format PNG de secours. Si vous souhaitez utiliser des variantes WebP ou AVIF dans votre application, vous pouvez ajouter image/webp ou image/avif à ce tableau. Par défaut, cela est défini comme suit : ruby config.active_storage.web_image_content_types = %w(image/png image/jpeg image/gif)

3.16.7 config.active_storage.content_types_to_serve_as_binary

Accepte un tableau de chaînes indiquant les types de contenu que Active Storage servira toujours en tant que pièce jointe, plutôt qu'en ligne. Par défaut, cela est défini comme suit :

config.active_storage.content_types_to_serve_as_binary = %w(text/html image/svg+xml application/postscript application/x-shockwave-flash text/xml application/xml application/xhtml+xml application/mathml+xml text/cache-manifest)

3.16.8 config.active_storage.content_types_allowed_inline

Accepte un tableau de chaînes indiquant les types de contenu que Active Storage autorise à servir en ligne. Par défaut, cela est défini comme suit :

config.active_storage.content_types_allowed_inline` = %w(image/png image/gif image/jpeg image/tiff image/vnd.adobe.photoshop image/vnd.microsoft.icon application/pdf)

3.16.9 config.active_storage.queues.analysis

Accepte un symbole indiquant la file d'attente Active Job à utiliser pour les tâches d'analyse. Lorsque cette option est nil, les tâches d'analyse sont envoyées à la file d'attente Active Job par défaut (voir config.active_job.default_queue_name).

La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est
6.0 :active_storage_analysis
6.1 nil

3.16.10 config.active_storage.queues.purge

Accepte un symbole indiquant la file d'attente Active Job à utiliser pour les tâches de suppression. Lorsque cette option est nil, les tâches de suppression sont envoyées à la file d'attente Active Job par défaut (voir config.active_job.default_queue_name).

La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est
6.0 :active_storage_purge
6.1 nil

3.16.11 config.active_storage.queues.mirror

Accepte un symbole indiquant la file d'attente Active Job à utiliser pour les tâches de duplication de téléchargement direct. Lorsque cette option est nil, les tâches de duplication sont envoyées à la file d'attente Active Job par défaut (voir config.active_job.default_queue_name). La valeur par défaut est nil.

3.16.12 config.active_storage.logger

Peut être utilisé pour définir le journal utilisé par Active Storage. Accepte un journal conforme à l'interface de Log4r ou à la classe de journalisation Ruby par défaut.

config.active_storage.logger = ActiveSupport::Logger.new(STDOUT)

3.16.13 config.active_storage.service_urls_expire_in

Détermine l'expiration par défaut des URL générées par :

  • ActiveStorage::Blob#url
  • ActiveStorage::Blob#service_url_for_direct_upload
  • ActiveStorage::Variant#url

La valeur par défaut est de 5 minutes.

3.16.14 config.active_storage.urls_expire_in

Détermine l'expiration par défaut des URL dans l'application Rails générées par Active Storage. La valeur par défaut est nil.

3.16.15 config.active_storage.routes_prefix

Peut être utilisé pour définir le préfixe de route pour les routes servies par Active Storage. Accepte une chaîne qui sera préfixée aux routes générées.

config.active_storage.routes_prefix = '/files'

La valeur par défaut est /rails/active_storage.

3.16.16 config.active_storage.track_variants

Détermine si les variantes sont enregistrées dans la base de données.

La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est
(original) false
6.1 true

3.16.17 config.active_storage.draw_routes

Peut être utilisé pour activer ou désactiver la génération des routes Active Storage. La valeur par défaut est true.

3.16.18 config.active_storage.resolve_model_to_route

Peut être utilisé pour modifier globalement la façon dont les fichiers Active Storage sont livrés.

Les valeurs autorisées sont :

  • :rails_storage_redirect : Redirige vers des URL de service signées et de courte durée.
  • :rails_storage_proxy : Proxy les fichiers en les téléchargeant.

La valeur par défaut est :rails_storage_redirect.

3.16.19 config.active_storage.video_preview_arguments

Peut être utilisé pour modifier la façon dont ffmpeg génère les images de prévisualisation vidéo.

La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est
(original) "-y -vframes 1 -f image2"
7.0 "-vf 'select=eq(n\\,0)+eq(key\\,1)+gt(scene\\,0.015)"1
+ ",loop=loop=-1:size=2,trim=start_frame=1'"2
+ " -frames:v 1 -f image2"

  1. Sélectionne la première image vidéo, ainsi que les images clés et les images qui dépassent le seuil de changement de scène.
  2. Utilise la première image vidéo comme solution de secours lorsque aucune autre image ne répond aux critères en bouclant la première (une ou) deux images sélectionnées, puis en supprimant la première image bouclée.

3.16.20 config.active_storage.multiple_file_field_include_hidden

À partir de Rails 7.1 et au-delà, les relations has_many_attached d'Active Storage auront par défaut pour effet de remplacer la collection actuelle au lieu de l'ajouter. Ainsi, pour prendre en charge la soumission d'une collection vide, lorsque multiple_file_field_include_hidden est à true, l'aide file_field affichera un champ caché auxiliaire, similaire au champ auxiliaire affiché par l'aide check_box.

La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est
(originale) false
7.0 true

3.16.21 config.active_storage.precompile_assets

Détermine si les ressources d'Active Storage doivent être ajoutées à la précompilation des ressources. Cela n'a aucun effet si Sprockets n'est pas utilisé. La valeur par défaut est true.

3.17 Configuration d'Action Text

3.17.1 config.action_text.attachment_tag_name

Accepte une chaîne de caractères pour la balise HTML utilisée pour envelopper les pièces jointes. Par défaut, elle est définie sur "action-text-attachment".

3.17.2 config.action_text.sanitizer_vendor

Configure le désinfecteur HTML utilisé par Action Text en définissant ActionText::ContentHelper.sanitizer sur une instance de la classe renvoyée par la méthode .safe_list_sanitizer du fournisseur. La valeur par défaut dépend de la version cible de config.load_defaults :

À partir de la version La valeur par défaut est Qui analyse le balisage comme
(originale) Rails::HTML4::Sanitizer HTML4
7.1 Rails::HTML5::Sanitizer (voir NOTE) HTML5

NOTE : Rails::HTML5::Sanitizer n'est pas pris en charge sur JRuby, donc sur les plates-formes JRuby, Rails utilisera Rails::HTML4::Sanitizer par défaut.

3.18 Configuration d'une base de données

Presque toutes les applications Rails interagiront avec une base de données. Vous pouvez vous connecter à la base de données en définissant une variable d'environnement ENV['DATABASE_URL'] ou en utilisant un fichier de configuration appelé config/database.yml.

En utilisant le fichier config/database.yml, vous pouvez spécifier toutes les informations nécessaires pour accéder à votre base de données :

development:
  adapter: postgresql
  database: blog_development
  pool: 5

Cela se connectera à la base de données nommée blog_development en utilisant l'adaptateur postgresql. Ces mêmes informations peuvent être stockées dans une URL et fournies via une variable d'environnement comme ceci :

ENV['DATABASE_URL'] # => "postgresql://localhost/blog_development?pool=5"

Le fichier config/database.yml contient des sections pour trois environnements différents dans lesquels Rails peut s'exécuter par défaut :

  • L'environnement development est utilisé sur votre ordinateur de développement/local lorsque vous interagissez manuellement avec l'application.
  • L'environnement test est utilisé lors de l'exécution de tests automatisés.
  • L'environnement production est utilisé lorsque vous déployez votre application pour que le monde entier puisse l'utiliser.

Si vous le souhaitez, vous pouvez spécifier manuellement une URL à l'intérieur de votre config/database.yml

development:
  url: postgresql://localhost/blog_development?pool=5

Le fichier config/database.yml peut contenir des balises ERB <%= %>. Tout ce qui se trouve entre les balises sera évalué comme du code Ruby. Vous pouvez l'utiliser pour extraire des données d'une variable d'environnement ou pour effectuer des calculs afin de générer les informations de connexion nécessaires.

ASTUCE : Vous n'avez pas besoin de mettre à jour les configurations de la base de données manuellement. Si vous regardez les options du générateur d'applications, vous verrez qu'une des options s'appelle --database. Cette option vous permet de choisir un adaptateur parmi une liste des bases de données relationnelles les plus utilisées. Vous pouvez même exécuter le générateur plusieurs fois : cd .. && rails new blog --database=mysql. Lorsque vous confirmez la substitution du fichier config/database.yml, votre application sera configurée pour MySQL au lieu de SQLite. Des exemples détaillés des connexions de base de données courantes sont donnés ci-dessous.

3.19 Préférence de connexion

Étant donné qu'il existe deux façons de configurer votre connexion (en utilisant config/database.yml ou en utilisant une variable d'environnement), il est important de comprendre comment elles peuvent interagir.

Si vous avez un fichier config/database.yml vide mais que votre ENV['DATABASE_URL'] est présent, alors Rails se connectera à la base de données via votre variable d'environnement :

$ cat config/database.yml

$ echo $DATABASE_URL
postgresql://localhost/my_database

Si vous avez un fichier config/database.yml mais pas de ENV['DATABASE_URL'], alors ce fichier sera utilisé pour se connecter à votre base de données :

$ cat config/database.yml
development:
  adapter: postgresql
  database: my_database
  host: localhost

$ echo $DATABASE_URL

Si vous avez à la fois config/database.yml et ENV['DATABASE_URL'] définis, alors Rails fusionnera les configurations ensemble. Pour mieux comprendre cela, nous devons voir quelques exemples.

Lorsque des informations de connexion en double sont fournies, la variable d'environnement prendra le dessus :

$ cat config/database.yml
development:
  adapter: sqlite3
  database: NOT_my_database
  host: localhost

$ echo $DATABASE_URL
postgresql://localhost/my_database

$ bin/rails runner 'puts ActiveRecord::Base.configurations'
#<ActiveRecord::DatabaseConfigurations:0x00007fd50e209a28>

$ bin/rails runner 'puts ActiveRecord::Base.configurations.inspect'
#<ActiveRecord::DatabaseConfigurations:0x00007fc8eab02880 @configurations=[
  #<ActiveRecord::DatabaseConfigurations::UrlConfig:0x00007fc8eab020b0
    @env_name="development", @spec_name="primary",
    @config={"adapter"=>"postgresql", "database"=>"my_database", "host"=>"localhost"}
    @url="postgresql://localhost/my_database">
  ]

Ici, l'adaptateur, l'hôte et la base de données correspondent aux informations de ENV['DATABASE_URL'].

Si des informations non dupliquées sont fournies, vous obtiendrez toutes les valeurs uniques, la variable d'environnement prend toujours le dessus en cas de conflits.

$ cat config/database.yml
development:
  adapter: sqlite3
  pool: 5

$ echo $DATABASE_URL
postgresql://localhost/my_database

$ bin/rails runner 'puts ActiveRecord::Base.configurations'
#<ActiveRecord::DatabaseConfigurations:0x00007fd50e209a28>

$ bin/rails runner 'puts ActiveRecord::Base.configurations.inspect'
#<ActiveRecord::DatabaseConfigurations:0x00007fc8eab02880 @configurations=[
  #<ActiveRecord::DatabaseConfigurations::UrlConfig:0x00007fc8eab020b0
    @env_name="development", @spec_name="primary",
    @config={"adapter"=>"postgresql", "database"=>"my_database", "host"=>"localhost", "pool"=>5}
    @url="postgresql://localhost/my_database">
  ]

Étant donné que le pool n'est pas dans les informations de connexion fournies par ENV['DATABASE_URL'], ses informations sont fusionnées. Étant donné que l'adaptateur est en double, les informations de connexion de ENV['DATABASE_URL'] l'emportent.

La seule façon de ne pas utiliser explicitement les informations de connexion dans ENV['DATABASE_URL'] est de spécifier une connexion URL explicite en utilisant la sous-clé "url" :

$ cat config/database.yml
development:
  url: sqlite3:NOT_my_database

$ echo $DATABASE_URL
postgresql://localhost/my_database

$ bin/rails runner 'puts ActiveRecord::Base.configurations'
#<ActiveRecord::DatabaseConfigurations:0x00007fd50e209a28>

$ bin/rails runner 'puts ActiveRecord::Base.configurations.inspect'
#<ActiveRecord::DatabaseConfigurations:0x00007fc8eab02880 @configurations=[
  #<ActiveRecord::DatabaseConfigurations::UrlConfig:0x00007fc8eab020b0
    @env_name="development", @spec_name="primary",
    @config={"adapter"=>"sqlite3", "database"=>"NOT_my_database"}
    @url="sqlite3:NOT_my_database">
  ]

Ici, les informations de connexion dans ENV['DATABASE_URL'] sont ignorées, notez l'adaptateur différent et le nom de la base de données.

Étant donné qu'il est possible d'intégrer ERB dans votre config/database.yml, il est préférable de montrer explicitement que vous utilisez ENV['DATABASE_URL'] pour vous connecter à votre base de données. Cela est particulièrement utile en production, car vous ne devez pas commettre des secrets tels que votre mot de passe de base de données dans votre gestion de source (comme Git).

$ cat config/database.yml
production:
  url: <%= ENV['DATABASE_URL'] %>

Maintenant, le comportement est clair, nous utilisons uniquement les informations de connexion dans ENV['DATABASE_URL'].

3.19.1 Configuration d'une base de données SQLite3

Rails est livré avec une prise en charge intégrée de SQLite3, qui est une application de base de données légère et sans serveur. Bien qu'un environnement de production chargé puisse surcharger SQLite, il fonctionne bien pour le développement et les tests. Rails utilise une base de données SQLite par défaut lors de la création d'un nouveau projet, mais vous pouvez toujours la modifier ultérieurement.

Voici la section du fichier de configuration par défaut (config/database.yml) avec les informations de connexion pour l'environnement de développement :

development:
  adapter: sqlite3
  database: storage/development.sqlite3
  pool: 5
  timeout: 5000

NOTE : Rails utilise une base de données SQLite3 pour le stockage des données par défaut car c'est une base de données sans configuration qui fonctionne simplement. Rails prend également en charge MySQL (y compris MariaDB) et PostgreSQL "prêt à l'emploi", et dispose de plugins pour de nombreux systèmes de bases de données. Si vous utilisez une base de données dans un environnement de production, Rails a très probablement un adaptateur pour celle-ci.

3.19.2 Configuration d'une base de données MySQL ou MariaDB

Si vous choisissez d'utiliser MySQL ou MariaDB au lieu de la base de données SQLite3 fournie, votre config/database.yml sera un peu différent. Voici la section développement :

development:
  adapter: mysql2
  encoding: utf8mb4
  database: blog_development
  pool: 5
  username: root
  password:
  socket: /tmp/mysql.sock

Si votre base de données de développement a un utilisateur root avec un mot de passe vide, cette configuration devrait fonctionner pour vous. Sinon, modifiez le nom d'utilisateur et le mot de passe dans la section development selon les besoins.

NOTE : Si votre version de MySQL est 5.5 ou 5.6 et que vous souhaitez utiliser l'ensemble de caractères utf8mb4 par défaut, veuillez configurer votre serveur MySQL pour prendre en charge le préfixe de clé plus long en activant la variable système innodb_large_prefix.

Les verrous consultatifs sont activés par défaut sur MySQL et sont utilisés pour rendre les migrations de base de données concurrentes sûres. Vous pouvez désactiver les verrous consultatifs en définissant advisory_locks sur false :

production:
  adapter: mysql2
  advisory_locks: false

3.19.3 Configuration d'une base de données PostgreSQL

Si vous choisissez d'utiliser PostgreSQL, votre config/database.yml sera personnalisé pour utiliser des bases de données PostgreSQL :

development:
  adapter: postgresql
  encoding: unicode
  database: blog_development
  pool: 5

Par défaut, Active Record utilise des fonctionnalités de base de données telles que les instructions préparées et les verrous consultatifs. Vous devrez peut-être désactiver ces fonctionnalités si vous utilisez un pool de connexions externe comme PgBouncer :

production:
  adapter: postgresql
  prepared_statements: false
  advisory_locks: false

Si activé, Active Record créera jusqu'à 1000 instructions préparées par connexion de base de données par défaut. Pour modifier ce comportement, vous pouvez définir statement_limit sur une valeur différente :

production:
  adapter: postgresql
  statement_limit: 200

Plus il y a d'instructions préparées en cours d'utilisation, plus votre base de données nécessitera de mémoire. Si votre base de données PostgreSQL atteint les limites de mémoire, essayez de réduire statement_limit ou de désactiver les instructions préparées.

3.19.4 Configuration d'une base de données SQLite3 pour la plateforme JRuby

Si vous choisissez d'utiliser SQLite3 et que vous utilisez JRuby, votre config/database.yml sera un peu différent. Voici la section développement :

development:
  adapter: jdbcsqlite3
  database: storage/development.sqlite3

3.19.5 Configuration d'une base de données MySQL ou MariaDB pour la plateforme JRuby

Si vous choisissez d'utiliser MySQL ou MariaDB et que vous utilisez JRuby, votre config/database.yml sera un peu différent. Voici la section développement :

development:
  adapter: jdbcmysql
  database: blog_development
  username: root
  password:

3.19.6 Configuration d'une base de données PostgreSQL pour la plateforme JRuby

Si vous choisissez d'utiliser PostgreSQL et que vous utilisez JRuby, votre config/database.yml sera un peu différent. Voici la section développement :

development:
  adapter: jdbcpostgresql
  encoding: unicode
  database: blog_development
  username: blog
  password:

Modifiez le nom d'utilisateur et le mot de passe dans la section development selon les besoins.

3.19.7 Configuration du stockage des métadonnées

Par défaut, Rails stockera les informations sur votre environnement Rails et votre schéma dans une table interne nommée ar_internal_metadata.

Pour désactiver cela par connexion, définissez use_metadata_table dans votre configuration de base de données. Cela est utile lorsque vous travaillez avec une base de données partagée et/ou un utilisateur de base de données qui ne peut pas créer de tables.

development:
  adapter: postgresql
  use_metadata_table: false

3.19.8 Configuration du comportement de réessai

Par défaut, Rails se reconnectera automatiquement au serveur de base de données et réessayera certaines requêtes en cas de problème. Seules les requêtes sûres à réessayer (idempotentes) seront réessayées. Le nombre de réessais peut être spécifié dans votre configuration de base de données via connection_retries, ou désactivé en définissant la valeur sur 0. Le nombre de réessais par défaut est de 1. yaml development: adapter: mysql2 connection_retries: 3

La configuration de la base de données permet également de configurer un retry_deadline. Si un retry_deadline est configuré, une requête autrement réessayable ne sera pas réessayée si le délai spécifié s'est écoulé pendant que la requête était initialement essayée. Par exemple, un retry_deadline de 5 secondes signifie que si 5 secondes se sont écoulées depuis une requête a été tentée pour la première fois, nous ne réessayerons pas la requête, même si elle est idempotente et qu'il reste des connection_retries.

Cette valeur est par défaut nulle, ce qui signifie que toutes les requêtes réessayables sont réessayées indépendamment du temps écoulé. La valeur de cette configuration doit être spécifiée en secondes.

development:
  adapter: mysql2
  retry_deadline: 5 # Arrêter de réessayer les requêtes après 5 secondes

3.19.9 Configuration du cache de requêtes

Par défaut, Rails met automatiquement en cache les ensembles de résultats renvoyés par les requêtes. Si Rails rencontre la même requête à nouveau pour cette requête ou ce travail, il utilisera l'ensemble de résultats mis en cache au lieu d'exécuter à nouveau la requête contre la base de données.

Le cache de requêtes est stocké en mémoire et, pour éviter d'utiliser trop de mémoire, il évacue automatiquement les requêtes les moins récemment utilisées lorsqu'il atteint un seuil. Par défaut, le seuil est de 100, mais peut être configuré dans le database.yml.

development:
  adapter: mysql2
  query_cache: 200

Pour désactiver complètement le cache de requêtes, il peut être défini sur false

development:
  adapter: mysql2
  query_cache: false

3.20 Création d'environnements Rails

Par défaut, Rails est livré avec trois environnements : "development", "test" et "production". Bien que cela soit suffisant pour la plupart des cas d'utilisation, il y a des circonstances où vous voulez plus d'environnements.

Imaginez que vous avez un serveur qui reproduit l'environnement de production mais qui est uniquement utilisé pour les tests. Un tel serveur est communément appelé un "serveur de staging". Pour définir un environnement appelé "staging" pour ce serveur, il suffit de créer un fichier appelé config/environments/staging.rb. Comme il s'agit d'un environnement similaire à la production, vous pouvez copier le contenu de config/environments/production.rb comme point de départ et apporter les modifications nécessaires à partir de là. Il est également possible de requérir et d'étendre d'autres configurations d'environnement de cette manière :

# config/environments/staging.rb
require_relative "production"

Rails.application.configure do
  # Staging overrides
end

Cet environnement n'est pas différent des environnements par défaut, démarrez un serveur avec bin/rails server -e staging, une console avec bin/rails console -e staging, Rails.env.staging? fonctionne, etc.

3.21 Déploiement dans un sous-répertoire (racine d'URL relative)

Par défaut, Rails s'attend à ce que votre application s'exécute à la racine (par exemple, /). Cette section explique comment exécuter votre application à l'intérieur d'un répertoire.

Supposons que nous voulions déployer notre application dans "/app1". Rails doit connaître ce répertoire pour générer les routes appropriées :

config.relative_url_root = "/app1"

alternativement, vous pouvez définir la variable d'environnement RAILS_RELATIVE_URL_ROOT.

Rails ajoutera maintenant "/app1" lors de la génération des liens.

3.21.1 Utilisation de Passenger

Passenger facilite l'exécution de votre application dans un sous-répertoire. Vous pouvez trouver la configuration pertinente dans le manuel de Passenger.

3.21.2 Utilisation d'un proxy inverse

Le déploiement de votre application à l'aide d'un proxy inverse présente des avantages certains par rapport aux déploiements traditionnels. Ils vous permettent d'avoir plus de contrôle sur votre serveur en superposant les composants requis par votre application. De nombreux serveurs web modernes peuvent être utilisés comme serveur proxy pour équilibrer des éléments tiers tels que des serveurs de cache ou des serveurs d'application.

Un tel serveur d'application que vous pouvez utiliser est Unicorn pour fonctionner derrière un proxy inverse.

Dans ce cas, vous devriez configurer le serveur proxy (NGINX, Apache, etc.) pour accepter les connexions de votre serveur d'application (Unicorn). Par défaut, Unicorn écoutera les connexions TCP sur le port 8080, mais vous pouvez changer le port ou le configurer pour utiliser des sockets à la place.

Vous pouvez trouver plus d'informations dans le lisez-moi d'Unicorn et comprendre la philosophie derrière cela.

Une fois que vous avez configuré le serveur d'application, vous devez faire une demande de proxy vers celui-ci en configurant votre serveur web de manière appropriée. Par exemple, votre configuration NGINX peut inclure :

upstream application_server {
  server 0.0.0.0:8080;
}

server {
  listen 80;
  server_name localhost;

  root /root/path/to/your_app/public;

  try_files $uri/index.html $uri.html @app;

  location @app {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://application_server;
  }

  # some other configuration
}

Assurez-vous de lire la documentation NGINX pour obtenir les informations les plus à jour.

4 Paramètres de l'environnement Rails

Certaines parties de Rails peuvent également être configurées de manière externe en fournissant des variables d'environnement. Les variables d'environnement suivantes sont reconnues par différentes parties de Rails :

  • ENV["RAILS_ENV"] définit l'environnement Rails (production, développement, test, etc.) sous lequel Rails s'exécutera.

  • ENV["RAILS_RELATIVE_URL_ROOT"] est utilisé par le code de routage pour reconnaître les URL lorsque vous déployez votre application dans un sous-répertoire.

  • ENV["RAILS_CACHE_ID"] et ENV["RAILS_APP_VERSION"] sont utilisés pour générer des clés de cache étendues dans le code de mise en cache de Rails. Cela vous permet d'avoir plusieurs caches distincts à partir de la même application.

5 Utilisation des fichiers d'initialisation

Après avoir chargé le framework et toutes les gemmes de votre application, Rails se tourne vers le chargement des initializers. Un initializer est n'importe quel fichier Ruby stocké sous config/initializers dans votre application. Vous pouvez utiliser des initializers pour stocker des paramètres de configuration qui doivent être définis après le chargement de tous les frameworks et gemmes, tels que des options pour configurer ces parties.

Les fichiers dans config/initializers (et tous les sous-répertoires de config/initializers) sont triés et chargés un par un dans le cadre de l'initializer load_config_initializers.

Si un initializer contient du code qui dépend du code dans un autre initializer, vous pouvez les combiner en un seul initializer à la place. Cela rend les dépendances plus explicites et peut aider à mettre en évidence de nouveaux concepts au sein de votre application. Rails prend également en charge la numérotation des noms de fichiers d'initializers, mais cela peut entraîner une instabilité des noms de fichiers. Il n'est pas recommandé de charger explicitement les initializers avec require, car cela entraînera le chargement de l'initializer deux fois.

REMARQUE : Il n'y a aucune garantie que vos initializers s'exécuteront après tous les initializers de gemmes, donc tout code d'initialisation qui dépend d'une gemme donnée ayant été initialisée doit être placé dans un bloc config.after_initialize.

6 Événements d'initialisation

Rails dispose de 5 événements d'initialisation auxquels vous pouvez vous connecter (listés dans l'ordre où ils sont exécutés) :

  • before_configuration : Cela s'exécute dès que la constante d'application hérite de Rails::Application. Les appels config sont évalués avant cela.

  • before_initialize : Cela s'exécute juste avant que le processus d'initialisation de l'application ne se produise avec l'initializer :bootstrap_hook près du début du processus d'initialisation de Rails.

  • to_prepare: Exécuté après l'exécution des initialiseurs pour toutes les Railties (y compris l'application elle-même), mais avant le chargement anticipé et la construction de la pile de middleware. Plus important encore, il s'exécute à chaque rechargement de code en development, mais une seule fois (au démarrage) en production et en test.

  • before_eager_load: Cela s'exécute directement avant le chargement anticipé, qui est le comportement par défaut pour l'environnement production et non pour l'environnement development.

  • after_initialize: Exécuté directement après l'initialisation de l'application, après l'exécution des initialiseurs de l'application dans config/initializers.

Pour définir un événement pour ces hooks, utilisez la syntaxe de bloc dans une sous-classe Rails::Application, Rails::Railtie ou Rails::Engine :

module YourApp
  class Application < Rails::Application
    config.before_initialize do
      # code d'initialisation ici
    end
  end
end

Alternativement, vous pouvez également le faire via la méthode config sur l'objet Rails.application :

Rails.application.config.before_initialize do
  # code d'initialisation ici
end

AVERTISSEMENT : Certaines parties de votre application, notamment le routage, ne sont pas encore configurées au moment où le bloc after_initialize est appelé.

6.1 Rails::Railtie#initializer

Rails a plusieurs initialiseurs qui s'exécutent au démarrage et qui sont tous définis en utilisant la méthode initializer de Rails::Railtie. Voici un exemple de l'initialiseur set_helpers_path d'Action Controller :

initializer "action_controller.set_helpers_path" do |app|
  ActionController::Helpers.helpers_path = app.helpers_paths
end

La méthode initializer prend trois arguments, le premier étant le nom de l'initialiseur, le deuxième étant un hachage d'options (non montré ici) et le troisième étant un bloc. La clé :before dans le hachage d'options peut être spécifiée pour indiquer quel initialiseur doit s'exécuter avant ce nouvel initialiseur, et la clé :after spécifiera quel initialiseur exécuter après cet initialiseur.

Les initialiseurs définis en utilisant la méthode initializer s'exécuteront dans l'ordre où ils sont définis, à l'exception de ceux qui utilisent les méthodes :before ou :after.

AVERTISSEMENT : Vous pouvez placer votre initialiseur avant ou après n'importe quel autre initialiseur dans la chaîne, tant que cela est logique. Supposons que vous ayez 4 initialiseurs appelés "one" à "four" (définis dans cet ordre) et que vous définissiez "four" pour aller avant "two" mais après "three", cela n'est tout simplement pas logique et Rails ne pourra pas déterminer l'ordre de vos initialiseurs.

L'argument de bloc de la méthode initializer est l'instance de l'application elle-même, et nous pouvons donc accéder à la configuration en utilisant la méthode config comme dans l'exemple.

Étant donné que Rails::Application hérite de Rails::Railtie (indirectement), vous pouvez utiliser la méthode initializer dans config/application.rb pour définir des initialiseurs pour l'application.

6.2 Initialiseurs

Voici une liste complète de tous les initialiseurs trouvés dans Rails dans l'ordre où ils sont définis (et donc exécutés, sauf indication contraire).

  • load_environment_hook : Sert de marqueur afin que :load_environment_config puisse être défini pour s'exécuter avant lui.

  • load_active_support : Requiert active_support/dependencies qui met en place la base pour Active Support. Requiert éventuellement active_support/all si config.active_support.bare n'est pas vrai, ce qui est la valeur par défaut.

  • initialize_logger : Initialise le logger (un objet ActiveSupport::Logger) pour l'application et le rend accessible à Rails.logger, à condition qu'aucun initialiseur inséré avant ce point n'ait défini Rails.logger.

  • initialize_cache: Si Rails.cache n'est pas encore défini, initialise le cache en référençant la valeur dans config.cache_store et stocke le résultat en tant que Rails.cache. Si cet objet répond à la méthode middleware, son middleware est inséré avant Rack::Runtime dans la pile de middleware.

  • set_clear_dependencies_hook: Cet initialiseur - qui s'exécute uniquement si config.enable_reloading est défini sur true - utilise ActionDispatch::Callbacks.after pour supprimer les constantes qui ont été référencées pendant la requête de l'espace objet afin qu'elles soient rechargées lors de la requête suivante.

  • bootstrap_hook: Exécute tous les blocs configurés before_initialize.

  • i18n.callbacks: Dans l'environnement de développement, configure un rappel to_prepare qui appellera I18n.reload! si l'une des locales a changé depuis la dernière requête. En production, ce rappel ne s'exécutera que lors de la première requête.

  • active_support.deprecation_behavior: Configure le comportement de signalement des dépréciations pour Rails.application.deprecators en fonction de config.active_support.report_deprecations, config.active_support.deprecation, config.active_support.disallowed_deprecation et config.active_support.disallowed_deprecation_warnings.

  • active_support.initialize_time_zone: Définit le fuseau horaire par défaut pour l'application en fonction du paramètre config.time_zone, qui est par défaut "UTC".

  • active_support.initialize_beginning_of_week: Définit le début de la semaine par défaut pour l'application en fonction du paramètre config.beginning_of_week, qui est par défaut :monday.

  • active_support.set_configs: Configure Active Support en utilisant les paramètres de config.active_support en utilisant la méthode send pour appeler les noms des méthodes en tant que setters pour ActiveSupport et en passant les valeurs.

  • action_dispatch.configure: Configure ActionDispatch::Http::URL.tld_length pour qu'il soit défini sur la valeur de config.action_dispatch.tld_length.

  • action_view.set_configs: Configure Action View en utilisant les paramètres de config.action_view en utilisant la méthode send pour appeler les noms des méthodes en tant que setters pour ActionView::Base et en passant les valeurs.

  • action_controller.assets_config: Initialise config.action_controller.assets_dir sur le répertoire public de l'application s'il n'est pas configuré explicitement.

  • action_controller.set_helpers_path: Définit helpers_path de Action Controller sur helpers_path de l'application.

  • action_controller.parameters_config: Configure les options des paramètres forts pour ActionController::Parameters.

  • action_controller.set_configs: Configure Action Controller en utilisant les paramètres de config.action_controller en utilisant la méthode send pour appeler les noms des méthodes en tant que setters pour ActionController::Base et en passant les valeurs.

  • action_controller.compile_config_methods: Initialise les méthodes pour les paramètres de configuration spécifiés afin qu'ils soient plus rapides à accéder.

  • active_record.initialize_timezone: Définit ActiveRecord::Base.time_zone_aware_attributes sur true, ainsi que ActiveRecord::Base.default_timezone sur UTC. Lorsque les attributs sont lus depuis la base de données, ils seront convertis dans le fuseau horaire spécifié par Time.zone.

  • active_record.logger: Définit ActiveRecord::Base.logger - s'il n'est pas déjà défini - sur Rails.logger.

  • active_record.migration_error: Configure le middleware pour vérifier les migrations en attente.

  • active_record.check_schema_cache_dump: Charge le cache de schéma si configuré et disponible.

  • active_record.warn_on_records_fetched_greater_than: Active les avertissements lorsque les requêtes renvoient un grand nombre d'enregistrements.

  • active_record.set_configs: Configure Active Record en utilisant les paramètres de config.active_record en utilisant la méthode send pour appeler les noms des méthodes en tant que setters pour ActiveRecord::Base et en passant les valeurs.

  • active_record.initialize_database: Charge la configuration de la base de données (par défaut) à partir de config/database.yml et établit une connexion pour l'environnement actuel.

  • active_record.log_runtime: Inclut ActiveRecord::Railties::ControllerRuntime et ActiveRecord::Railties::JobRuntime qui sont responsables de signaler le temps pris par les appels Active Record à l'enregistreur pour la requête.

  • active_record.set_reloader_hooks: Réinitialise toutes les connexions rechargeables à la base de données si config.enable_reloading est défini sur true.

  • active_record.add_watchable_files: Ajoute les fichiers schema.rb et structure.sql aux fichiers à surveiller.

  • active_job.logger: Définit ActiveJob::Base.logger - s'il n'est pas déjà défini - sur Rails.logger.

  • active_job.set_configs: Configure Active Job en utilisant les paramètres de config.active_job en envoyant les noms de méthodes en tant que setters à ActiveJob::Base et en passant les valeurs correspondantes.

  • action_mailer.logger: Configure ActionMailer::Base.logger - si ce n'est pas déjà configuré - avec Rails.logger.

  • action_mailer.set_configs: Configure Action Mailer en utilisant les paramètres de config.action_mailer en envoyant les noms de méthodes en tant que setters à ActionMailer::Base et en passant les valeurs correspondantes.

  • action_mailer.compile_config_methods: Initialise les méthodes pour les paramètres de configuration spécifiés afin d'accélérer leur accès.

  • set_load_path: Cet initialiseur s'exécute avant bootstrap_hook. Ajoute les chemins spécifiés par config.load_paths et tous les chemins d'autoload à $LOAD_PATH.

  • set_autoload_paths: Cet initialiseur s'exécute avant bootstrap_hook. Ajoute tous les sous-répertoires de app et les chemins spécifiés par config.autoload_paths, config.eager_load_paths et config.autoload_once_paths à ActiveSupport::Dependencies.autoload_paths.

  • add_routing_paths: Charge (par défaut) tous les fichiers config/routes.rb (dans l'application et les railties, y compris les engines) et configure les routes pour l'application.

  • add_locales: Ajoute les fichiers de config/locales (de l'application, des railties et des engines) à I18n.load_path, rendant les traductions disponibles.

  • add_view_paths: Ajoute le répertoire app/views de l'application, des railties et des engines au chemin de recherche des fichiers de vue pour l'application.

  • add_mailer_preview_paths: Ajoute le répertoire test/mailers/previews de l'application, des railties et des engines au chemin de recherche des fichiers de prévisualisation de mailer pour l'application.

  • load_environment_config: Cet initialiseur s'exécute avant load_environment_hook. Charge le fichier config/environments pour l'environnement actuel.

  • prepend_helpers_path: Ajoute le répertoire app/helpers de l'application, des railties et des engines au chemin de recherche des helpers pour l'application.

  • load_config_initializers: Charge tous les fichiers Ruby de config/initializers dans l'application, les railties et les engines. Les fichiers de ce répertoire peuvent contenir des paramètres de configuration qui doivent être définis après le chargement de tous les frameworks.

  • engines_blank_point: Fournit un point d'initialisation pour se connecter si vous souhaitez effectuer des actions avant le chargement des engines. Après ce point, tous les initialiseurs des railties et des engines sont exécutés.

  • add_generator_templates: Recherche les templates pour les générateurs dans lib/templates pour l'application, les railties et les engines, et les ajoute au paramètre config.generators.templates, ce qui les rend disponibles pour tous les générateurs.

  • ensure_autoload_once_paths_as_subset: Vérifie que config.autoload_once_paths ne contient que des chemins présents dans config.autoload_paths. Si des chemins supplémentaires sont présents, une exception sera levée.

  • add_to_prepare_blocks: Le bloc pour chaque appel config.to_prepare dans l'application, une railtie ou un engine est ajouté aux rappels to_prepare pour Action Dispatch, qui seront exécutés par requête en développement, ou avant la première requête en production.

  • add_builtin_route: Si l'application s'exécute sous l'environnement de développement, cela ajoutera la route rails/info/properties aux routes de l'application. Cette route fournit des informations détaillées telles que la version de Rails et de Ruby pour public/index.html dans une application Rails par défaut.

  • build_middleware_stack: Construit la pile de middlewares pour l'application, renvoyant un objet qui a une méthode call prenant un objet d'environnement Rack pour la requête.

  • eager_load!: Si config.eager_load est true, exécute les hooks config.before_eager_load puis appelle eager_load! qui chargera tous les espaces de noms spécifiés dans config.eager_load_namespaces.

  • finisher_hook: Fournit un point d'accrochage après la finalisation du processus d'initialisation de l'application, ainsi que l'exécution de tous les blocs config.after_initialize pour l'application, les railties et les engines.

  • set_routes_reloader_hook: Configure Action Dispatch pour recharger le fichier de routes en utilisant ActiveSupport::Callbacks.to_run.

  • disable_dependency_loading: Désactive le chargement automatique des dépendances si config.eager_load est défini sur true.

7 Pooling de base de données

Les connexions à la base de données d'Active Record sont gérées par ActiveRecord::ConnectionAdapters::ConnectionPool, qui garantit qu'un pool de connexions synchronise la quantité d'accès par thread à un nombre limité de connexions à la base de données. Cette limite est par défaut de 5 et peut être configurée dans database.yml.

development:
  adapter: sqlite3
  database: storage/development.sqlite3
  pool: 5
  timeout: 5000

Étant donné que le pooling de connexions est géré par défaut à l'intérieur d'Active Record, tous les serveurs d'application (Thin, Puma, Unicorn, etc.) devraient se comporter de la même manière. Le pool de connexions à la base de données est initialement vide. À mesure que la demande de connexions augmente, il en crée jusqu'à atteindre la limite du pool de connexions.

Chaque requête vérifiera une connexion la première fois qu'elle nécessite un accès à la base de données. À la fin de la requête, elle vérifiera la connexion. Cela signifie que la fente de connexion supplémentaire sera à nouveau disponible pour la prochaine requête dans la file d'attente.

Si vous essayez d'utiliser plus de connexions que celles disponibles, Active Record vous bloquera et attendra une connexion du pool. Si elle ne peut pas obtenir de connexion, une erreur de délai d'attente similaire à celle indiquée ci-dessous sera générée.

ActiveRecord::ConnectionTimeoutError - could not obtain a database connection within 5.000 seconds (waited 5.000 seconds)

Si vous obtenez l'erreur ci-dessus, vous voudrez peut-être augmenter la taille du pool de connexions en incrémentant l'option pool dans database.yml.

Si vous exécutez dans un environnement multi-thread, il peut y avoir une chance que plusieurs threads accèdent simultanément à plusieurs connexions. Donc, en fonction de votre charge de requêtes actuelle, vous pourriez très bien avoir plusieurs threads en concurrence pour un nombre limité de connexions.

8 Configuration personnalisée

Vous pouvez configurer votre propre code à l'aide de l'objet de configuration Rails avec une configuration personnalisée sous l'espace de noms config.x ou directement config. La principale différence entre ces deux options est que vous devriez utiliser config.x si vous définissez une configuration imbriquée (par exemple, config.x.nested.hi), et simplement config pour une configuration à un seul niveau (par exemple, config.hello).

config.x.payment_processing.schedule = :daily
config.x.payment_processing.retries  = 3
config.super_debugger = true

Ces points de configuration sont ensuite disponibles via l'objet de configuration :

Rails.configuration.x.payment_processing.schedule # => :daily
Rails.configuration.x.payment_processing.retries  # => 3
Rails.configuration.x.payment_processing.not_set  # => nil
Rails.configuration.super_debugger                # => true

Vous pouvez également utiliser Rails::Application.config_for pour charger des fichiers de configuration entiers :

# config/payment.yml
production:
  environment: production
  merchant_id: production_merchant_id
  public_key:  production_public_key
  private_key: production_private_key

development:
  environment: sandbox
  merchant_id: development_merchant_id
  public_key:  development_public_key
  private_key: development_private_key
# config/application.rb
module MyApp
  class Application < Rails::Application
    config.payment = config_for(:payment)
  end
end
Rails.configuration.payment['merchant_id'] # => production_merchant_id ou development_merchant_id

Rails::Application.config_for prend en charge une configuration shared pour regrouper des configurations communes. La configuration partagée sera fusionnée dans la configuration de l'environnement.

# config/example.yml
shared:
  foo:
    bar:
      baz: 1

development:
  foo:
    bar:
      qux: 2
# environnement de développement
Rails.application.config_for(:example)[:foo][:bar] #=> { baz: 1, qux: 2 }

9 Indexation des moteurs de recherche

Parfois, vous souhaiterez empêcher certaines pages de votre application d'être visibles sur des sites de recherche tels que Google, Bing, Yahoo ou Duck Duck Go. Les robots qui indexent ces sites analyseront d'abord le fichier http://votre-site.com/robots.txt pour savoir quelles pages ils sont autorisés à indexer. Rails crée ce fichier pour vous à l'intérieur du dossier /public. Par défaut, il permet aux moteurs de recherche d'indexer toutes les pages de votre application. Si vous souhaitez bloquer l'indexation sur toutes les pages de votre application, utilisez ceci :

User-agent: *
Disallow: /

Pour bloquer uniquement des pages spécifiques, il est nécessaire d'utiliser une syntaxe plus complexe. Apprenez-la dans la documentation officielle.

10 Surveillance du système de fichiers événementiel

Si la gem listen est chargée, Rails utilise un moniteur de système de fichiers événementiel pour détecter les modifications lorsque le rechargement est activé :

group :development do
  gem 'listen', '~> 3.3'
end

Sinon, à chaque requête, Rails parcourt l'arborescence de l'application pour vérifier si quelque chose a changé.

Sur Linux et macOS, aucune gem supplémentaire n'est nécessaire, mais certaines sont requises pour *BSD et pour Windows.

Notez que certains configurations ne sont pas prises en charge.

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.