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
config.action_controller.allow_deprecated_parameters_hash_equality
:false
config.action_dispatch.debug_exception_log_level
::error
config.action_dispatch.default_headers
:{ "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" }
config.action_text.sanitizer_vendor
:Rails::HTML::Sanitizer.best_supported_vendor
config.action_view.sanitizer_vendor
:Rails::HTML::Sanitizer.best_supported_vendor
config.active_job.use_big_decimal_serializer
:true
config.active_record.allow_deprecated_singular_associations_name
:false
config.active_record.before_committed_on_all_records
:true
config.active_record.belongs_to_required_validates_foreign_key
:false
config.active_record.default_column_serializer
:nil
config.active_record.encryption.hash_digest_class
:OpenSSL::Digest::SHA256
config.active_record.encryption.support_sha1_for_non_deterministic_encryption
:false
config.active_record.marshalling_format_version
:7.1
config.active_record.query_log_tags_format
::sqlcommenter
config.active_record.raise_on_assign_to_attr_readonly
:true
config.active_record.run_after_transaction_callbacks_in_order_defined
:true
config.active_record.run_commit_callbacks_on_first_saved_instances_in_transaction
:false
config.active_record.sqlite3_adapter_strict_strings_by_default
:true
config.active_support.cache_format_version
:7.1
config.active_support.message_serializer
::json_allow_marshal
config.active_support.raise_on_invalid_cache_expiration_time
:true
config.active_support.use_message_serializer_for_metadata
:true
config.add_autoload_paths_to_load_path
:false
config.log_file_size
:100 * 1024 * 1024
config.precompile_filter_parameters
:true
3.1.2 Valeurs par défaut pour la version cible 7.0
config.action_controller.raise_on_open_redirects
:true
config.action_controller.wrap_parameters_by_default
:true
config.action_dispatch.cookies_serializer
::json
config.action_dispatch.default_headers
:{ "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" }
config.action_mailer.smtp_timeout
:5
config.action_view.apply_stylesheet_media_default
:false
config.action_view.button_to_generates_button_tag
:true
config.active_record.automatic_scope_inversing
:true
config.active_record.partial_inserts
:false
config.active_record.verify_foreign_keys_for_fixtures
:true
config.active_storage.multiple_file_field_include_hidden
:true
config.active_storage.variant_processor
::vips
config.active_storage.video_preview_arguments
:"-vf 'select=eq(n\\,0)+eq(key\\,1)+gt(scene\\,0.015),loop=loop=-1:size=2,trim=start_frame=1' -frames:v 1 -f image2"
config.active_support.cache_format_version
:7.0
config.active_support.executor_around_test_case
:true
config.active_support.hash_digest_class
:OpenSSL::Digest::SHA256
config.active_support.isolation_level
::thread
config.active_support.key_generator_hash_digest_class
:OpenSSL::Digest::SHA256
Valeurs par défaut pour la version cible 6.1
3.1.3 Valeurs par défaut pour la version cible 6.0
config.action_dispatch.use_cookies_with_metadata
:true
config.action_mailer.delivery_job
:"ActionMailer::MailDeliveryJob"
config.action_view.default_enforce_utf8
:false
config.active_record.collection_cache_versioning
:true
config.active_storage.queues.analysis
::active_storage_analysis
config.active_storage.queues.purge
::active_storage_purge
3.1.4 Valeurs par défaut pour la version cible 5.2
config.action_controller.default_protect_from_forgery
:true
config.action_dispatch.use_authenticated_cookie_encryption
:true
config.action_view.form_with_generates_ids
:true
config.active_record.cache_versioning
:true
config.active_support.hash_digest_class
:OpenSSL::Digest::SHA1
config.active_support.use_authenticated_message_encryption
:true
3.1.5 Valeurs par défaut pour la version cible 5.1
config.action_view.form_with_generates_remote_forms
:true
config.assets.unknown_asset_fallback
:false
3.1.6 Valeurs par défaut pour la version cible 5.0
ActiveSupport.to_time_preserves_timezone
:true
config.action_controller.forgery_protection_origin_check
:true
config.action_controller.per_form_csrf_tokens
:true
config.active_record.belongs_to_required_by_default
:true
config.ssl_options
:{ hsts: { subdomains: true } }
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 classeActiveSupport::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 debin/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 deresource_controller
, définit le générateur à utiliser pour générer un contrôleur scaffolded lors de l'utilisation debin/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 Customercustomerid
.:table_name_with_underscore
ferait de la clé primaire de la classe Customercustomer_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 viaActiveRecord.logger
au niveau:warn
.:raise
- Les avertissements de la base de données seront levés en tant queActiveRecord::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 rappelsafter_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).
- Si l'enregistrement est créé dans la transaction, puis mis à jour par une autre instance, les rappels
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énementActiveSupport::Notifications.instrument
sur le sujetunpermitted_parameters.action_controller
et enregistrer au niveau DEBUG:raise
pour lever une exceptionActionController::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) |
|
7.0 |
|
7.1 |
|
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'
.
3.9.9 config.action_dispatch.signed_cookie_salt
Définit la valeur du sel des cookies signés. Par défaut, il est défini sur 'signed cookie'
.
3.9.10 config.action_dispatch.encrypted_cookie_salt
Définit la valeur du sel des cookies chiffrés. Par défaut, il est défini sur 'encrypted cookie'
.
3.9.11 config.action_dispatch.encrypted_signed_cookie_salt
Définit la valeur du sel des cookies signés et chiffrés. Par défaut, il est défini sur 'signed encrypted cookie'
.
3.9.12 config.action_dispatch.authenticated_encrypted_cookie_salt
Définit le sel des cookies chiffrés et authentifiés. Par défaut, il est défini sur 'authenticated encrypted cookie'
.
3.9.13 config.action_dispatch.encrypted_cookie_cipher
Définit le chiffre à utiliser pour les cookies chiffrés. Par défaut, il est défini sur "aes-256-gcm"
.
3.9.14 config.action_dispatch.signed_cookie_digest
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.
3.9.16 config.action_dispatch.use_authenticated_cookie_encryption
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
.
3.10.17 config.action_view.preload_links_header
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 surfalse
.:enable_starttls_auto
- Détecte si STARTTLS est activé sur votre serveur SMTP et commence à l'utiliser. Par défaut, il est défini surtrue
.: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 directementOpenSSL::SSL::VERIFY_NONE
ouOpenSSL::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"
|
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"]
etENV["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 deRails::Application
. Les appelsconfig
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 endevelopment
, mais une seule fois (au démarrage) enproduction
et entest
.before_eager_load
: Cela s'exécute directement avant le chargement anticipé, qui est le comportement par défaut pour l'environnementproduction
et non pour l'environnementdevelopment
.after_initialize
: Exécuté directement après l'initialisation de l'application, après l'exécution des initialiseurs de l'application dansconfig/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
: Requiertactive_support/dependencies
qui met en place la base pour Active Support. Requiert éventuellementactive_support/all
siconfig.active_support.bare
n'est pas vrai, ce qui est la valeur par défaut.initialize_logger
: Initialise le logger (un objetActiveSupport::Logger
) pour l'application et le rend accessible àRails.logger
, à condition qu'aucun initialiseur inséré avant ce point n'ait définiRails.logger
.initialize_cache
: SiRails.cache
n'est pas encore défini, initialise le cache en référençant la valeur dansconfig.cache_store
et stocke le résultat en tant queRails.cache
. Si cet objet répond à la méthodemiddleware
, son middleware est inséré avantRack::Runtime
dans la pile de middleware.set_clear_dependencies_hook
: Cet initialiseur - qui s'exécute uniquement siconfig.enable_reloading
est défini surtrue
- utiliseActionDispatch::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ésbefore_initialize
.i18n.callbacks
: Dans l'environnement de développement, configure un rappelto_prepare
qui appelleraI18n.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 pourRails.application.deprecators
en fonction deconfig.active_support.report_deprecations
,config.active_support.deprecation
,config.active_support.disallowed_deprecation
etconfig.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ètreconfig.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ètreconfig.beginning_of_week
, qui est par défaut:monday
.active_support.set_configs
: Configure Active Support en utilisant les paramètres deconfig.active_support
en utilisant la méthodesend
pour appeler les noms des méthodes en tant que setters pourActiveSupport
et en passant les valeurs.action_dispatch.configure
: ConfigureActionDispatch::Http::URL.tld_length
pour qu'il soit défini sur la valeur deconfig.action_dispatch.tld_length
.action_view.set_configs
: Configure Action View en utilisant les paramètres deconfig.action_view
en utilisant la méthodesend
pour appeler les noms des méthodes en tant que setters pourActionView::Base
et en passant les valeurs.action_controller.assets_config
: Initialiseconfig.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éfinithelpers_path
de Action Controller surhelpers_path
de l'application.action_controller.parameters_config
: Configure les options des paramètres forts pourActionController::Parameters
.action_controller.set_configs
: Configure Action Controller en utilisant les paramètres deconfig.action_controller
en utilisant la méthodesend
pour appeler les noms des méthodes en tant que setters pourActionController::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éfinitActiveRecord::Base.time_zone_aware_attributes
surtrue
, ainsi queActiveRecord::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é parTime.zone
.active_record.logger
: DéfinitActiveRecord::Base.logger
- s'il n'est pas déjà défini - surRails.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 deconfig.active_record
en utilisant la méthodesend
pour appeler les noms des méthodes en tant que setters pourActiveRecord::Base
et en passant les valeurs.active_record.initialize_database
: Charge la configuration de la base de données (par défaut) à partir deconfig/database.yml
et établit une connexion pour l'environnement actuel.active_record.log_runtime
: InclutActiveRecord::Railties::ControllerRuntime
etActiveRecord::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 siconfig.enable_reloading
est défini surtrue
.active_record.add_watchable_files
: Ajoute les fichiersschema.rb
etstructure.sql
aux fichiers à surveiller.active_job.logger
: DéfinitActiveJob::Base.logger
- s'il n'est pas déjà défini - surRails.logger
.active_job.set_configs
: Configure Active Job en utilisant les paramètres deconfig.active_job
en envoyant les noms de méthodes en tant que setters àActiveJob::Base
et en passant les valeurs correspondantes.action_mailer.logger
: ConfigureActionMailer::Base.logger
- si ce n'est pas déjà configuré - avecRails.logger
.action_mailer.set_configs
: Configure Action Mailer en utilisant les paramètres deconfig.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 avantbootstrap_hook
. Ajoute les chemins spécifiés parconfig.load_paths
et tous les chemins d'autoload à$LOAD_PATH
.set_autoload_paths
: Cet initialiseur s'exécute avantbootstrap_hook
. Ajoute tous les sous-répertoires deapp
et les chemins spécifiés parconfig.autoload_paths
,config.eager_load_paths
etconfig.autoload_once_paths
àActiveSupport::Dependencies.autoload_paths
.add_routing_paths
: Charge (par défaut) tous les fichiersconfig/routes.rb
(dans l'application et les railties, y compris les engines) et configure les routes pour l'application.add_locales
: Ajoute les fichiers deconfig/locales
(de l'application, des railties et des engines) àI18n.load_path
, rendant les traductions disponibles.add_view_paths
: Ajoute le répertoireapp/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épertoiretest/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 avantload_environment_hook
. Charge le fichierconfig/environments
pour l'environnement actuel.prepend_helpers_path
: Ajoute le répertoireapp/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 deconfig/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 danslib/templates
pour l'application, les railties et les engines, et les ajoute au paramètreconfig.generators.templates
, ce qui les rend disponibles pour tous les générateurs.ensure_autoload_once_paths_as_subset
: Vérifie queconfig.autoload_once_paths
ne contient que des chemins présents dansconfig.autoload_paths
. Si des chemins supplémentaires sont présents, une exception sera levée.add_to_prepare_blocks
: Le bloc pour chaque appelconfig.to_prepare
dans l'application, une railtie ou un engine est ajouté aux rappelsto_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 routerails/info/properties
aux routes de l'application. Cette route fournit des informations détaillées telles que la version de Rails et de Ruby pourpublic/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éthodecall
prenant un objet d'environnement Rack pour la requête.eager_load!
: Siconfig.eager_load
esttrue
, exécute les hooksconfig.before_eager_load
puis appelleeager_load!
qui chargera tous les espaces de noms spécifiés dansconfig.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 blocsconfig.after_initialize
pour l'application, les railties et les engines.set_routes_reloader_hook
: Configure Action Dispatch pour recharger le fichier de routes en utilisantActiveSupport::Callbacks.to_run
.disable_dependency_loading
: Désactive le chargement automatique des dépendances siconfig.eager_load
est défini surtrue
.
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.