NO LEA ESTE ARCHIVO EN GITHUB, LAS GUÍAS ESTÁN PUBLICADAS EN https://guides.rubyonrails.org.

Configuración de Aplicaciones Rails

Esta guía cubre las características de configuración e inicialización disponibles para las aplicaciones Rails.

Después de leer esta guía, sabrá:


1 Ubicaciones para el Código de Inicialización

Rails ofrece cuatro lugares estándar para ubicar el código de inicialización:

  • config/application.rb
  • Archivos de configuración específicos del entorno
  • Inicializadores
  • Después de los inicializadores

2 Ejecutando Código Antes de Rails

En el raro caso de que su aplicación necesite ejecutar algún código antes de que Rails se cargue, colóquelo encima de la llamada a require "rails/all" en config/application.rb.

3 Configuración de Componentes de Rails

En general, el trabajo de configurar Rails significa configurar los componentes de Rails, así como configurar Rails en sí mismo. El archivo de configuración config/application.rb y los archivos de configuración específicos del entorno (como config/environments/production.rb) le permiten especificar las diversas configuraciones que desea pasar a todos los componentes.

Por ejemplo, podría agregar esta configuración al archivo config/application.rb:

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

Esta es una configuración para Rails en sí. Si desea pasar configuraciones a componentes individuales de Rails, puede hacerlo a través del mismo objeto config en config/application.rb:

config.active_record.schema_format = :ruby

Rails usará esa configuración particular para configurar Active Record.

ADVERTENCIA: Use los métodos de configuración pública en lugar de llamar directamente a la clase asociada. Por ejemplo, Rails.application.config.action_mailer.options en lugar de ActionMailer::Base.options.

NOTA: Si necesita aplicar configuración directamente a una clase, use un hook de carga diferida en un inicializador para evitar la carga automática de la clase antes de que se complete la inicialización. Esto fallará porque la carga automática durante la inicialización no puede repetirse de manera segura cuando la aplicación se recarga.

3.1 Valores por Defecto Versionados

config.load_defaults carga valores de configuración predeterminados para una versión objetivo y todas las versiones anteriores. Por ejemplo, config.load_defaults 6.1 cargará los valores predeterminados para todas las versiones hasta e incluyendo la versión 6.1.

A continuación se muestran los valores predeterminados asociados con cada versión objetivo. En casos de valores conflictivos, las versiones más nuevas tienen prioridad sobre las más antiguas.

3.1.1 Valores por Defecto para la Versión Objetivo 7.2

3.1.2 Valores por Defecto para la Versión Objetivo 7.1

3.1.3 Valores por Defecto para la Versión Objetivo 7.0

3.1.4 Valores por Defecto para la Versión Objetivo 6.1

3.1.5 Valores por Defecto para la Versión Objetivo 6.0

3.1.6 Valores por Defecto para la Versión Objetivo 5.2

3.1.7 Valores por Defecto para la Versión Objetivo 5.1

3.1.8 Valores por Defecto para la Versión Objetivo 5.0

3.2 Configuración General de Rails

Los siguientes métodos de configuración deben ser llamados en un objeto Rails::Railtie, como una subclase de Rails::Engine o Rails::Application.

3.2.1 config.add_autoload_paths_to_load_path

Indica si las rutas de carga automática deben agregarse a $LOAD_PATH. Se recomienda establecerlo en false en el modo :zeitwerk temprano, en config/application.rb. Zeitwerk utiliza rutas absolutas internamente, y las aplicaciones que se ejecutan en modo :zeitwerk no necesitan require_dependency, por lo que los modelos, controladores, trabajos, etc. no necesitan estar en $LOAD_PATH. Establecer esto en false ahorra a Ruby de verificar estos directorios al resolver llamadas require con rutas relativas, y ahorra trabajo y RAM a Bootsnap, ya que no necesita construir un índice para ellos.

El valor predeterminado depende de la versión objetivo de config.load_defaults:

A partir de la versión El valor predeterminado es
(original) true
7.1 false

El directorio lib no se ve afectado por este indicador, siempre se agrega a $LOAD_PATH.

3.2.2 config.after_initialize

Toma un bloque que se ejecutará después de que Rails haya terminado de inicializar la aplicación. Eso incluye la inicialización del propio framework, motores y todos los inicializadores de la aplicación en config/initializers. Tenga en cuenta que este bloque se ejecutará para tareas rake. Útil para configurar valores establecidos por otros inicializadores:

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

3.2.3 config.after_routes_loaded

Toma un bloque que se ejecutará después de que Rails haya terminado de cargar las rutas de la aplicación. Este bloque también se ejecutará cada vez que se recarguen las rutas.

config.after_routes_loaded do
  # Código que hace algo con Rails.application.routes
end

3.2.4 config.allow_concurrency

Controla si las solicitudes deben manejarse de manera concurrente. Esto solo debe establecerse en false si el código de la aplicación no es seguro para hilos. Por defecto es true.

3.2.5 config.asset_host

Establece el host para los activos. Útil cuando se utilizan CDNs para alojar activos, o cuando se desea trabajar alrededor de las restricciones de concurrencia incorporadas en los navegadores utilizando diferentes alias de dominio. Versión más corta de config.action_controller.asset_host.

3.2.6 config.assume_ssl

Hace que la aplicación crea que todas las solicitudes están llegando a través de SSL. Esto es útil cuando se pasa a través de un equilibrador de carga que termina SSL, la solicitud reenviada parecerá ser HTTP en lugar de HTTPS para la aplicación. Esto hace que los redireccionamientos y la seguridad de las cookies apunten a HTTP en lugar de HTTPS. Este middleware hace que el servidor asuma que el proxy ya ha terminado SSL, y que la solicitud realmente es HTTPS.

3.2.7 config.autoflush_log

Habilita la escritura de salida del archivo de registro inmediatamente en lugar de almacenarla en búfer. Por defecto es true.

3.2.8 config.autoload_lib(ignore:)

Este método agrega lib a config.autoload_paths y config.eager_load_paths.

Normalmente, el directorio lib tiene subdirectorios que no deben cargarse automáticamente ni cargarse de manera ansiosa. Por favor, pase su nombre relativo a lib en el argumento requerido ignore. Por ejemplo,

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

Por favor, vea más detalles en la guía de carga automática.

3.2.9 config.autoload_lib_once(ignore:)

El método config.autoload_lib_once es similar a config.autoload_lib, excepto que agrega lib a config.autoload_once_paths en su lugar.

Al llamar a config.autoload_lib_once, las clases y módulos en lib pueden cargarse automáticamente, incluso desde inicializadores de la aplicación, pero no se recargarán.

3.2.10 config.autoload_once_paths

Acepta un array de rutas desde las cuales Rails cargará automáticamente constantes que no se borrarán por solicitud. Relevante si la recarga está habilitada, lo cual está por defecto en el entorno development. De lo contrario, toda la carga automática ocurre solo una vez. Todos los elementos de este array también deben estar en autoload_paths. Por defecto es un array vacío.

3.2.11 config.autoload_paths

Acepta un array de rutas desde las cuales Rails cargará automáticamente constantes. Por defecto es un array vacío. Desde Rails 6, no se recomienda ajustar esto. Vea Carga Automática y Recarga de Constantes.

3.2.12 config.beginning_of_week

Establece el inicio de semana predeterminado para la aplicación. Acepta un día válido de la semana como símbolo (por ejemplo, :monday).

3.2.13 config.cache_classes

Configuración antigua equivalente a !config.enable_reloading. Admitido por compatibilidad con versiones anteriores.

3.2.14 config.cache_store

Configura qué tienda de caché usar para el almacenamiento en caché de Rails. Las opciones incluyen uno de los símbolos :memory_store, :file_store, :mem_cache_store, :null_store, :redis_cache_store, o un objeto que implemente la API de caché. Por defecto es :file_store. Vea Tiendas de Caché para opciones de configuración por tienda.

3.2.15 config.colorize_logging

Especifica si usar o no códigos de color ANSI al registrar información. Por defecto es true.

3.2.16 config.consider_all_requests_local

Es un indicador. Si es true, entonces cualquier error causará que se vuelque información detallada de depuración en la respuesta HTTP, y el controlador Rails::Info mostrará el contexto de tiempo de ejecución de la aplicación en /rails/info/properties. true por defecto en los entornos de desarrollo y prueba, y false en producción. Para un control más fino, establezca esto en false e implemente show_detailed_exceptions? en los controladores para especificar qué solicitudes deben proporcionar información de depuración sobre errores.

3.2.17 config.console

Le permite establecer la clase que se usará como consola cuando ejecute bin/rails console. Es mejor ejecutarlo en el bloque console:

console do
  # este bloque se llama solo cuando se ejecuta la consola,
  # por lo que podemos requerir pry aquí de manera segura
  require "pry"
  config.console = Pry
end

3.2.18 config.content_security_policy_nonce_directives

Vea Agregando un Nonce en la Guía de Seguridad

3.2.19 config.content_security_policy_nonce_generator

Vea Agregando un Nonce en la Guía de Seguridad

3.2.20 config.content_security_policy_report_only

Vea Informando Violaciones en la Guía de Seguridad

3.2.21 config.credentials.content_path

La ruta del archivo de credenciales encriptado.

Por defecto es config/credentials/#{Rails.env}.yml.enc si existe, o config/credentials.yml.enc de lo contrario.

NOTA: Para que los comandos bin/rails credentials reconozcan este valor, debe establecerse en config/application.rb o config/environments/#{Rails.env}.rb.

3.2.22 config.credentials.key_path

La ruta del archivo de clave de credenciales encriptadas.

Por defecto es config/credentials/#{Rails.env}.key si existe, o config/master.key de lo contrario.

NOTA: Para que los comandos bin/rails credentials reconozcan este valor, debe establecerse en config/application.rb o config/environments/#{Rails.env}.rb.

3.2.23 config.debug_exception_response_format

Establece el formato utilizado en las respuestas cuando ocurren errores en el entorno de desarrollo. Por defecto es :api para aplicaciones solo API y :default para aplicaciones normales.

3.2.24 config.disable_sandbox

Controla si alguien puede iniciar una consola en modo sandbox. Esto es útil para evitar una sesión prolongada de consola sandbox, que podría llevar a que un servidor de base de datos se quede sin memoria. Por defecto es false.

3.2.25 config.dom_testing_default_html_version

Controla si un analizador HTML4 o un analizador HTML5 se usa por defecto por los ayudantes de prueba en Action View, Action Dispatch y rails-dom-testing.

El valor predeterminado depende de la versión objetivo de config.load_defaults:

A partir de la versión El valor predeterminado es
(original) :html4
7.1 :html5 (ver NOTA)

NOTA: El analizador HTML5 de Nokogiri no es compatible con JRuby, por lo que en plataformas JRuby Rails volverá a :html4.

3.2.26 config.eager_load

Cuando es true, carga ansiosamente todos los espacios de nombres registrados en config.eager_load_namespaces. Esto incluye su aplicación, motores, frameworks de Rails y cualquier otro espacio de nombres registrado.

3.2.27 config.eager_load_namespaces

Registra espacios de nombres que se cargan ansiosamente cuando config.eager_load está establecido en true. Todos los espacios de nombres en la lista deben responder al método eager_load!.

3.2.28 config.eager_load_paths

Acepta un array de rutas desde las cuales Rails cargará ansiosamente al iniciar si config.eager_load es verdadero. Por defecto es cada carpeta en el directorio app de la aplicación.

3.2.29 config.enable_reloading

Si config.enable_reloading es verdadero, las clases y módulos de la aplicación se recargan entre solicitudes web si cambian. Por defecto es true en el entorno development, y false en el entorno production.

También se define el predicado config.reloading_enabled?.

3.2.30 config.encoding

Configura la codificación a nivel de aplicación. Por defecto es UTF-8.

3.2.31 config.exceptions_app

Establece la aplicación de excepciones invocada por el middleware ShowException cuando ocurre una excepción. Por defecto es ActionDispatch::PublicExceptions.new(Rails.public_path).

Las aplicaciones de excepciones necesitan manejar errores ActionDispatch::Http::MimeNegotiation::InvalidType, que se lanzan cuando un cliente envía un encabezado Accept o Content-Type no válido. La aplicación ActionDispatch::PublicExceptions por defecto hace esto automáticamente, estableciendo Content-Type a text/html y devolviendo un estado 406 Not Acceptable. No manejar este error resultará en un 500 Internal Server Error.

Usar el Rails.application.routes RouteSet como la aplicación de excepciones también requiere este manejo especial. Podría verse algo así:

# 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.32 config.file_watcher

Es la clase utilizada para detectar actualizaciones de archivos en el sistema de archivos cuando config.reload_classes_only_on_change es true. Rails se envía con ActiveSupport::FileUpdateChecker, el predeterminado, y ActiveSupport::EventedFileUpdateChecker (este depende de la gema listen). Las clases personalizadas deben ajustarse a la API de ActiveSupport::FileUpdateChecker.

3.2.33 config.filter_parameters

Utilizado para filtrar los parámetros que no desea que se muestren en los registros, como contraseñas o números de tarjetas de crédito. También filtra valores sensibles de columnas de base de datos al llamar a #inspect en un objeto Active Record. Por defecto, Rails filtra las contraseñas agregando los siguientes filtros en config/initializers/filter_parameter_logging.rb.

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

El filtro de parámetros funciona mediante coincidencia parcial de expresión regular.

3.2.34 config.filter_redirect

Utilizado para filtrar urls de redirección de los registros de la aplicación.

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

El filtro de redirección funciona probando que las urls incluyan cadenas o coincidan con expresiones regulares.

3.2.35 config.force_ssl

Fuerza que todas las solicitudes se sirvan a través de HTTPS y establece "https://" como el protocolo predeterminado al generar URLs. La aplicación de HTTPS se maneja mediante el middleware ActionDispatch::SSL, que puede configurarse a través de config.ssl_options.

3.2.36 config.helpers_paths

Define un array de rutas adicionales para cargar ayudantes de vista.

3.2.37 config.host_authorization

Acepta un hash de opciones para configurar el middleware de Autorización de Host

3.2.38 config.hosts

Un array de cadenas, expresiones regulares o IPAddr utilizado para validar el encabezado Host. Utilizado por el middleware de Autorización de Host para ayudar a prevenir ataques de reencaminamiento de DNS.

3.2.39 config.javascript_path

Establece la ruta donde vive el JavaScript de su aplicación en relación con el directorio app y el valor predeterminado es javascript. La javascript_path configurada de una aplicación se excluirá de autoload_paths.

3.2.40 config.log_file_size

Define el tamaño máximo del archivo de registro de Rails en bytes. Por defecto es 104_857_600 (100 MiB) en desarrollo y prueba, e ilimitado en todos los demás entornos.

3.2.41 config.log_formatter

Define el formateador del registrador de Rails. Esta opción por defecto es una instancia de ActiveSupport::Logger::SimpleFormatter para todos los entornos. Si está estableciendo un valor para config.logger, debe pasar manualmente el valor de su formateador a su registrador antes de que sea envuelto en una instancia de ActiveSupport::TaggedLogging, Rails no lo hará por usted.

3.2.42 config.log_level

Define la verbosidad del registrador de Rails. Esta opción por defecto es :debug para todos los entornos excepto producción, donde por defecto es :info. Los niveles de registro disponibles son: :debug, :info, :warn, :error, :fatal y :unknown.

3.2.43 config.log_tags

Acepta una lista de métodos a los que el objeto request responde, un Proc que acepta el objeto request, o algo que responde a to_s. Esto facilita etiquetar líneas de registro con información de depuración como subdominio e id de solicitud, ambos muy útiles para depurar aplicaciones de producción multiusuario.

3.2.44 config.logger

Es el registrador que se usará para Rails.logger y cualquier registro relacionado con Rails como ActiveRecord::Base.logger. Por defecto es una instancia de ActiveSupport::TaggedLogging que envuelve una instancia de ActiveSupport::Logger que genera un registro en el directorio log/. Puede proporcionar un registrador personalizado, para obtener compatibilidad completa debe seguir estas pautas:

  • Para admitir un formateador, debe asignar manualmente un formateador del valor config.log_formatter al registrador.
  • Para admitir registros etiquetados, la instancia de registro debe estar envuelta con ActiveSupport::TaggedLogging.
  • Para admitir silenciamiento, el registrador debe incluir el módulo ActiveSupport::LoggerSilence. La clase ActiveSupport::Logger ya incluye estos módulos.
class MyLogger < ::Logger
  include ActiveSupport::LoggerSilence
end

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

3.2.45 config.middleware

Le permite configurar el middleware de la aplicación. Esto se cubre en profundidad en la sección Configuración de Middleware a continuación.

3.2.46 config.precompile_filter_parameters

Cuando es true, precompilará config.filter_parameters usando ActiveSupport::ParameterFilter.precompile_filters.

El valor predeterminado depende de la versión objetivo de config.load_defaults:

A partir de la versión El valor predeterminado es
(original) false
7.1 true

3.2.47 config.public_file_server.enabled

Configura si Rails debe servir archivos estáticos desde el directorio público. Por defecto es true.

Si el software del servidor (por ejemplo, NGINX o Apache) debe servir archivos estáticos en su lugar, establezca este valor en false.

3.2.48 config.railties_order

Permite especificar manualmente el orden en que se cargan Railties/Engines. El valor predeterminado es [:all].

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

3.2.49 config.rake_eager_load

Cuando es true, carga ansiosamente la aplicación al ejecutar tareas Rake. Por defecto es false.

3.2.50 config.read_encrypted_secrets

DESAPROBADO: Debería estar usando credenciales en lugar de secretos encriptados.

Cuando es true, intentará leer secretos encriptados desde config/secrets.yml.enc

3.2.51 config.relative_url_root

Puede usarse para decirle a Rails que está desplegando en un subdirectorio. El valor por defecto es ENV['RAILS_RELATIVE_URL_ROOT'].

3.2.52 config.reload_classes_only_on_change

Habilita o deshabilita la recarga de clases solo cuando cambian los archivos rastreados. Por defecto rastrea todo en rutas de carga automática y está establecido en true. Si config.enable_reloading es false, esta opción se ignora.

3.2.53 config.require_master_key

Hace que la aplicación no se inicie si no se ha puesto a disposición una clave maestra a través de ENV["RAILS_MASTER_KEY"] o el archivo config/master.key.

3.2.54 config.sandbox_by_default

Cuando es true, la consola de rails comienza en modo sandbox. Para iniciar la consola de rails en modo no sandbox, debe especificarse --no-sandbox. Esto es útil para evitar escrituras accidentales en la base de datos de producción. Por defecto es false.

3.2.55 config.secret_key_base

El respaldo para especificar la clave de entrada para el generador de claves de una aplicación. Se recomienda dejar esto sin establecer y, en su lugar, especificar un secret_key_base en config/credentials.yml.enc. Vea la documentación de la API de secret_key_base para más información y métodos de configuración alternativos.

3.2.56 config.server_timing

Cuando es true, agrega el middleware ServerTiming a la pila de middleware. Por defecto es false, pero está establecido en true en el archivo config/environments/development.rb generado por defecto.

3.2.57 config.session_options

Opciones adicionales pasadas a config.session_store. Debe usar config.session_store para establecer esto en lugar de modificarlo usted mismo.

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

3.2.58 config.session_store

Especifica qué clase usar para almacenar la sesión. Los valores posibles son :cache_store, :cookie_store, :mem_cache_store, un almacén personalizado, o :disabled. :disabled indica a Rails que no se ocupe de las sesiones.

Esta configuración se configura mediante una llamada de método regular, en lugar de un setter. Esto permite pasar opciones adicionales:

config.session_store :cookie_store, key: "_your_app_session"

Si se especifica un almacén personalizado como símbolo, se resolverá en el espacio de nombres ActionDispatch::Session:

# usa ActionDispatch::Session::MyCustomStore como el almacén de sesión
config.session_store :my_custom_store

El almacén predeterminado es un almacén de cookies con el nombre de la aplicación como clave de sesión.

3.2.59 config.ssl_options

Opciones de configuración para el middleware ActionDispatch::SSL.

El valor predeterminado depende de la versión objetivo de config.load_defaults:

A partir de la versión El valor predeterminado es
(original) {}
5.0 { hsts: { subdomains: true } }

3.2.60 config.time_zone

Establece la zona horaria predeterminada para la aplicación y habilita la conciencia de zona horaria para Active Record.

3.2.61 config.x

Utilizado para agregar fácilmente configuración personalizada anidada al objeto de configuración de la aplicación

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

Vea Configuración Personalizada

3.2.62 config.yjit

Habilita YJIT a partir de Ruby 3.3, para ofrecer mejoras de rendimiento considerables. Si está desplegando en un entorno con restricciones de memoria, es posible que desee establecer esto en false.

A partir de la versión El valor predeterminado es
(original) false
7.2 true

3.3 Configuración de Activos

3.3.1 config.assets.css_compressor

Define el compresor CSS a usar. Está configurado por defecto por sass-rails. El único valor alternativo en este momento es :yui, que utiliza la gema yui-compressor.

3.3.2 config.assets.js_compressor

Define el compresor de JavaScript a usar. Los valores posibles son :terser, :closure, :uglifier y :yui, que requieren el uso de las gemas terser, closure-compiler, uglifier o yui-compressor, respectivamente.

3.3.3 config.assets.gzip

Un indicador que habilita la creación de una versión comprimida en gzip de los activos compilados, junto con los activos no comprimidos. Establecido en true por defecto.

3.3.4 config.assets.paths

Contiene las rutas que se utilizan para buscar activos. Agregar rutas a esta opción de configuración hará que esas rutas se utilicen en la búsqueda de activos.

3.3.5 config.assets.precompile

Le permite especificar activos adicionales (además de application.css y application.js) que deben precompilarse cuando se ejecuta bin/rails assets:precompile.

3.3.6 config.assets.unknown_asset_fallback

Le permite modificar el comportamiento de la tubería de activos cuando un activo no está en la tubería, si usa sprockets-rails 3.2.0 o más reciente.

El valor predeterminado depende de la versión objetivo de config.load_defaults:

A partir de la versión El valor predeterminado es
(original) true
5.1 false

3.3.7 config.assets.prefix

Define el prefijo desde donde se sirven los activos. Por defecto es /assets.

3.3.8 config.assets.manifest

Define la ruta completa que se usará para el archivo de manifiesto del precompilador de activos. Por defecto es un archivo llamado manifest-<random>.json en el directorio config.assets.prefix dentro de la carpeta pública.

3.3.9 config.assets.digest

Habilita el uso de huellas SHA256 en los nombres de los activos. Establecido en true por defecto.

3.3.10 config.assets.debug

Deshabilita la concatenación y compresión de activos. Establecido en true por defecto en development.rb.

3.3.11 config.assets.version

Es una cadena de opción que se usa en la generación de hash SHA256. Esto se puede cambiar para forzar que todos los archivos se recompilen.

3.3.12 config.assets.compile

Es un booleano que se puede usar para activar la compilación en vivo de Sprockets en producción.

3.3.13 config.assets.logger

Acepta un registrador que se ajusta a la interfaz de Log4r o la clase Logger de Ruby por defecto. Por defecto es el mismo configurado en config.logger. Establecer config.assets.logger en false desactivará el registro de activos servidos.

3.3.14 config.assets.quiet

Deshabilita el registro de solicitudes de activos. Establecido en true por defecto en development.rb.

3.4 Configuración de Generadores

Rails le permite alterar qué generadores se usan con el método config.generators. Este método toma un bloque:

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

El conjunto completo de métodos que se pueden usar en este bloque son los siguientes:

  • force_plural permite nombres de modelo pluralizados. Por defecto es false.
  • helper define si se deben generar o no ayudantes. Por defecto es true.
  • integration_tool define qué herramienta de integración usar para generar pruebas de integración. Por defecto es :test_unit.
  • system_tests define qué herramienta de integración usar para generar pruebas de sistema. Por defecto es :test_unit.
  • orm define qué orm usar. Por defecto es false y usará Active Record por defecto.
  • resource_controller define qué generador usar para generar un controlador al usar bin/rails generate resource. Por defecto es :controller.
  • resource_route define si se debe generar o no una definición de ruta de recurso. Por defecto es true.
  • scaffold_controller diferente de resource_controller, define qué generador usar para generar un controlador scaffolded al usar bin/rails generate scaffold. Por defecto es :scaffold_controller.
  • test_framework define qué marco de prueba usar. Por defecto es false y usará minitest por defecto.
  • template_engine define qué motor de plantillas usar, como ERB o Haml. Por defecto es :erb.
  • apply_rubocop_autocorrect_after_generate! aplica la función de autocorrección de RuboCop después de que se ejecuten los generadores de Rails.

3.5 Configuración de Middleware

Cada aplicación Rails viene con un conjunto estándar de middleware que utiliza en este orden en el entorno de desarrollo:

3.5.1 ActionDispatch::HostAuthorization

Previene contra ataques de reencaminamiento de DNS y otros ataques de encabezado Host. Se incluye en el entorno de desarrollo por defecto con la siguiente configuración:

Rails.application.config.hosts = [
  IPAddr.new("0.0.0.0/0"),        # Todas las direcciones IPv4.
  IPAddr.new("::/0"),             # Todas las direcciones IPv6.
  "localhost",                    # El dominio reservado localhost.
  ENV["RAILS_DEVELOPMENT_HOSTS"]  # Hosts adicionales separados por comas para desarrollo.
]

En otros entornos Rails.application.config.hosts está vacío y no se realizarán comprobaciones del encabezado Host. Si desea protegerse contra ataques de encabezado en producción, debe permitir manualmente los hosts permitidos con:

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

El host de una solicitud se verifica contra las entradas hosts con el operador de caso (#===), lo que permite que hosts admita entradas de tipo Regexp, Proc y IPAddr por nombrar algunos. Aquí hay un ejemplo con una expresión regular.

# Permitir solicitudes de subdominios como `www.product.com` y
# `beta1.product.com`.
Rails.application.config.hosts << /.*\.product\.com/

La expresión regular proporcionada se envolverá con ambos anclajes (\A y \z) por lo que debe coincidir con todo el nombre de host. /product.com/, por ejemplo, una vez anclado, fallaría al coincidir con www.product.com.

Se admite un caso especial que le permite permitir todos los subdominios:

# Permitir solicitudes de subdominios como `www.product.com` y
# `beta1.product.com`.
Rails.application.config.hosts << ".product.com"

Puede excluir ciertas solicitudes de las comprobaciones de Autorización de Host configurando config.host_authorization.exclude:

# Excluir solicitudes para la ruta /healthcheck/ de la comprobación de hosts
Rails.application.config.host_authorization = {
  exclude: ->(request) { request.path.include?('healthcheck') }
}

Cuando una solicitud llega a un host no autorizado, se ejecutará una aplicación Rack predeterminada y responderá con 403 Forbidden. Esto se puede personalizar configurando config.host_authorization.response_app. Por ejemplo:

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

3.5.2 ActionDispatch::ServerTiming

Agrega el encabezado Server-Timing a la respuesta, que incluye métricas de rendimiento del servidor. Estos datos se pueden ver inspeccionando la respuesta en el panel de Red de las Herramientas de Desarrollador del navegador. La mayoría de los navegadores proporcionan una pestaña de Tiempo que visualiza los datos.

3.5.3 ActionDispatch::SSL

Fuerza que cada solicitud se sirva utilizando HTTPS. Habilitado si config.force_ssl está establecido en true. Las opciones pasadas a esto pueden configurarse estableciendo config.ssl_options.

3.5.4 ActionDispatch::Static

Se utiliza para servir activos estáticos. Deshabilitado si config.public_file_server.enabled es false. Establezca config.public_file_server.index_name si necesita servir un archivo de índice de directorio estático que no se llame index. Por ejemplo, para servir main.html en lugar de index.html para solicitudes de directorio, establezca config.public_file_server.index_name en "main".

3.5.5 ActionDispatch::Executor

Permite la recarga segura de código en hilos. Deshabilitado si config.allow_concurrency es false, lo que hace que Rack::Lock se cargue. Rack::Lock envuelve la aplicación en un mutex para que solo pueda ser llamada por un solo hilo a la vez.

3.5.6 ActiveSupport::Cache::Strategy::LocalCache

Sirve como una caché básica respaldada por memoria. Esta caché no es segura para hilos y está destinada solo a servir como una caché de memoria temporal para un solo hilo.

3.5.7 Rack::Runtime

Establece un encabezado X-Runtime, que contiene el tiempo (en segundos) tomado para ejecutar la solicitud.

3.5.8 Rails::Rack::Logger

Notifica a los registros que la solicitud ha comenzado. Después de que la solicitud se completa, vacía todos los registros.

3.5.9 ActionDispatch::ShowExceptions

Rescata cualquier excepción devuelta por la aplicación y muestra bonitas páginas de excepción si la solicitud es local o si config.consider_all_requests_local está establecido en true. Si config.action_dispatch.show_exceptions está establecido en :none, las excepciones se lanzarán independientemente.

3.5.10 ActionDispatch::RequestId

Hace que un encabezado X-Request-Id único esté disponible para la respuesta y habilita el método ActionDispatch::Request#uuid. Configurable con config.action_dispatch.request_id_header.

3.5.11 ActionDispatch::RemoteIp

Verifica ataques de suplantación de IP y obtiene un client_ip válido de los encabezados de la solicitud. Configurable con las opciones config.action_dispatch.ip_spoofing_check y config.action_dispatch.trusted_proxies.

3.5.12 Rack::Sendfile

Intercepta respuestas cuyo cuerpo se está sirviendo desde un archivo y lo reemplaza con un encabezado X-Sendfile específico del servidor. Configurable con config.action_dispatch.x_sendfile_header.

3.5.13 ActionDispatch::Callbacks

Ejecuta las devoluciones de llamada de preparación antes de servir la solicitud.

3.5.14 ActionDispatch::Cookies

Establece cookies para la solicitud.

3.5.15 ActionDispatch::Session::CookieStore

Es responsable de almacenar la sesión en cookies. Se puede usar un middleware alternativo para esto cambiando config.session_store.

3.5.16 ActionDispatch::Flash

Configura las claves flash. Solo disponible si config.session_store está establecido en un valor.

3.5.17 Rack::MethodOverride

Permite que el método se sobrescriba si params[:_method] está establecido. Este es el middleware que admite los tipos de método HTTP PATCH, PUT y DELETE.

3.5.18 Rack::Head

Devuelve un cuerpo vacío para todas las solicitudes HEAD. Deja todas las demás solicitudes sin cambios.

3.5.19 Agregando Middleware Personalizado

Además de estos middleware habituales, puede agregar el suyo propio utilizando el método config.middleware.use:

config.middleware.use Magical::Unicorns

Esto colocará el middleware Magical::Unicorns al final de la pila. Puede usar insert_before si desea agregar un middleware antes de otro.

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

O puede insertar un middleware en una posición exacta utilizando índices. Por ejemplo, si desea insertar el middleware Magical::Unicorns en la parte superior de la pila, puede hacerlo, de la siguiente manera:

config.middleware.insert_before 0, Magical::Unicorns

También hay insert_after que insertará un middleware después de otro:

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

Los middleware también se pueden intercambiar completamente y reemplazar por otros:

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

Los middleware se pueden mover de un lugar a otro:

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

Esto moverá el middleware Magical::Unicorns antes de ActionDispatch::Flash. También puede moverlo después:

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

También se pueden eliminar completamente de la pila:

config.middleware.delete Rack::MethodOverride

3.6 Configuración de i18n

Todas estas opciones de configuración se delegan a la biblioteca I18n.

3.6.1 config.i18n.available_locales

Define los locales disponibles permitidos para la aplicación. Por defecto son todas las claves de locales encontradas en los archivos de locales, usualmente solo :en en una nueva aplicación.

3.6.2 config.i18n.default_locale

Establece el locale predeterminado de una aplicación utilizada para i18n. Por defecto es :en.

3.6.3 config.i18n.enforce_available_locales

Asegura que todos los locales pasados a través de i18n deben ser declarados en la lista available_locales, lanzando una excepción I18n::InvalidLocale al establecer un locale no disponible. Por defecto es true. Se recomienda no desactivar esta opción a menos que sea estrictamente necesario, ya que funciona como una medida de seguridad contra el establecimiento de cualquier locale no válido a partir de la entrada del usuario.

3.6.4 config.i18n.load_path

Establece la ruta que Rails usa para buscar archivos de locales. Por defecto es config/locales/**/*.{yml,rb}.

3.6.5 config.i18n.raise_on_missing_translations

Determina si se debe lanzar un error por traducciones faltantes. Esto por defecto es false.

3.6.6 config.i18n.fallbacks

Establece el comportamiento de reserva para traducciones faltantes. Aquí hay 3 ejemplos de uso para esta opción:

  • Puede establecer la opción en true para usar el locale predeterminado como reserva, así:
  config.i18n.fallbacks = true
  • O puede establecer un array de locales como reserva, así:
  config.i18n.fallbacks = [:tr, :en]
  • O puede establecer diferentes reservas para locales individualmente. Por ejemplo, si desea usar :tr para :az y :de, :en para :da como reservas, puede hacerlo, así:
  config.i18n.fallbacks = { az: :tr, da: [:de, :en] }
  #o
  config.i18n.fallbacks.map = { az: :tr, da: [:de, :en] }

3.7 Configuración de Active Model

3.7.1 config.active_model.i18n_customize_full_message

Controla si el formato de Error#full_message puede ser sobrescrito en un archivo de locales i18n. Por defecto es false.

Cuando se establece en true, full_message buscará un formato a nivel de atributo y modelo en los archivos de locales. El formato predeterminado es "%{attribute} %{message}", donde attribute es el nombre del atributo y message es el mensaje específico de validación. El siguiente ejemplo sobrescribe el formato para todos los atributos de Person, así como el formato para un atributo específico de Person (age).

class Person
  include ActiveModel::Validations

  attr_accessor :name, :age

  validates :name, :age, presence: true
end
en:
  activemodel: # o activerecord:
    errors:
      models:
        person:
          # Sobrescribir el formato para todos los atributos de Person:
          format: "Invalid %{attribute} (%{message})"
          attributes:
            age:
              # Sobrescribir el formato para el atributo age:
              format: "%{message}"
              blank: "Please fill in your %{attribute}"
irb> person = Person.new.tap(&:valid?)

irb> person.errors.full_messages
=> [
  "Invalid Name (can't be blank)",
  "Please fill in your Age"
]

irb> person.errors.messages
=> {
  :name => ["can't be blank"],
  :age  => ["Please fill in your Age"]
}

3.8 Configuración de Active Record

config.active_record incluye una variedad de opciones de configuración:

3.8.1 config.active_record.logger

Acepta un logger que cumpla con la interfaz de Log4r o la clase predeterminada Ruby Logger, que luego se pasa a cualquier nueva conexión de base de datos realizada. Puedes recuperar este logger llamando a logger en una clase de modelo de Active Record o en una instancia de modelo de Active Record. Establecer en nil para deshabilitar el registro.

3.8.2 config.active_record.primary_key_prefix_type

Te permite ajustar el nombre de las columnas de clave primaria. Por defecto, Rails asume que las columnas de clave primaria se llaman id (y esta opción de configuración no necesita establecerse). Hay dos opciones más:

  • :table_name haría que la clave primaria para la clase Customer sea customerid.
  • :table_name_with_underscore haría que la clave primaria para la clase Customer sea customer_id.

3.8.3 config.active_record.table_name_prefix

Te permite establecer una cadena global que se antepone a los nombres de las tablas. Si estableces esto en northwest_, entonces la clase Customer buscará northwest_customers como su tabla. El valor predeterminado es una cadena vacía.

3.8.4 config.active_record.table_name_suffix

Te permite establecer una cadena global que se apende a los nombres de las tablas. Si estableces esto en _northwest, entonces la clase Customer buscará customers_northwest como su tabla. El valor predeterminado es una cadena vacía.

3.8.5 config.active_record.schema_migrations_table_name

Te permite establecer una cadena que se usará como el nombre de la tabla de migraciones de esquema.

3.8.6 config.active_record.internal_metadata_table_name

Te permite establecer una cadena que se usará como el nombre de la tabla de metadatos internos.

3.8.7 config.active_record.protected_environments

Te permite establecer una matriz de nombres de entornos donde las acciones destructivas deben estar prohibidas.

3.8.8 config.active_record.pluralize_table_names

Especifica si Rails buscará nombres de tabla singulares o plurales en la base de datos. Si se establece en true (el valor predeterminado), entonces la clase Customer usará la tabla customers. Si se establece en false, entonces la clase Customer usará la tabla customer.

3.8.9 config.active_record.default_timezone

Determina si usar Time.local (si se establece en :local) o Time.utc (si se establece en :utc) al extraer fechas y horas de la base de datos. El valor predeterminado es :utc.

3.8.10 config.active_record.schema_format

Controla el formato para volcar el esquema de la base de datos a un archivo. Las opciones son :ruby (el valor predeterminado) para una versión independiente de la base de datos que depende de las migraciones, o :sql para un conjunto de declaraciones SQL (potencialmente dependientes de la base de datos).

3.8.11 config.active_record.error_on_ignored_order

Especifica si se debe generar un error si el orden de una consulta se ignora durante una consulta por lotes. Las opciones son true (generar error) o false (advertir). El valor predeterminado es false.

3.8.12 config.active_record.timestamped_migrations

Controla si las migraciones están numeradas con enteros en serie o con marcas de tiempo. El valor predeterminado es true, para usar marcas de tiempo, que se prefieren si hay varios desarrolladores trabajando en la misma aplicación.

3.8.13 config.active_record.automatically_invert_plural_associations

Controla si Active Record buscará automáticamente relaciones inversas con un nombre pluralizado.

Ejemplo:

class Post < ApplicationRecord
  has_many :comments
end

class Comment < ApplicationRecord
  belongs_to :post
end

En el caso anterior, Active Record solía buscar solo una asociación :comment (singular) en Post, y no la encontraba.

Con esta opción habilitada, también buscará una asociación :comments. En la gran mayoría de los casos, tener la asociación inversa descubierta es beneficioso ya que puede prevenir algunas consultas inútiles, pero puede causar problemas de compatibilidad hacia atrás con código heredado que no lo espera.

Este comportamiento se puede deshabilitar por modelo:

class Comment < ApplicationRecord
  self.automatically_invert_plural_associations = false

  belongs_to :post
end

Y por asociación:

class Comment < ApplicationRecord
  self.automatically_invert_plural_associations = true

  belongs_to :post, inverse_of: nil
end
A partir de la versión El valor predeterminado es
(original) false

3.8.14 config.active_record.validate_migration_timestamps

Controla si se deben validar las marcas de tiempo de las migraciones. Cuando se establece, se generará un error si el prefijo de marca de tiempo para una migración es más de un día antes de la marca de tiempo asociada con la hora actual. Esto se hace para prevenir el antedatado de archivos de migración, lo que puede afectar la generación de migraciones y otros comandos de migración. config.active_record.timestamped_migrations debe estar establecido en true.

El valor predeterminado depende de la versión de destino de config.load_defaults:

A partir de la versión El valor predeterminado es
(original) false
7.2 true

3.8.15 config.active_record.db_warnings_action

Controla la acción a tomar cuando una consulta SQL produce una advertencia. Las siguientes opciones están disponibles:

  • :ignore - Se ignorarán las advertencias de la base de datos. Este es el valor predeterminado.

  • :log - Las advertencias de la base de datos se registrarán a través de ActiveRecord.logger en el nivel :warn.

  • :raise - Las advertencias de la base de datos se generarán como ActiveRecord::SQLWarning.

  • :report - Las advertencias de la base de datos se informarán a los suscriptores del informe de errores de Rails.

  • Proc personalizado - Se puede proporcionar un proc personalizado. Debe aceptar un objeto de error SQLWarning.

Por ejemplo:

  config.active_record.db_warnings_action = ->(warning) do
    # Informar a un servicio de informes de excepciones personalizado
    Bugsnag.notify(warning.message) do |notification|
      notification.add_metadata(:warning_code, warning.code)
      notification.add_metadata(:warning_level, warning.level)
    end
  end

3.8.16 config.active_record.db_warnings_ignore

Especifica una lista blanca de códigos de advertencia y mensajes que se ignorarán, independientemente de la acción configurada db_warnings_action. El comportamiento predeterminado es informar todas las advertencias. Las advertencias a ignorar se pueden especificar como Strings o Regexps. Por ejemplo:

  config.active_record.db_warnings_action = :raise
  # Las siguientes advertencias no se generarán
  config.active_record.db_warnings_ignore = [
    /Invalid utf8mb4 character string/,
    "An exact warning message",
    "1062", # Error MySQL 1062: Entrada duplicada
  ]

3.8.17 config.active_record.migration_strategy

Controla la clase de estrategia utilizada para realizar métodos de declaración de esquema en una migración. La clase predeterminada delega al adaptador de conexión. Las estrategias personalizadas deben heredar de ActiveRecord::Migration::ExecutionStrategy, o pueden heredar de DefaultStrategy, lo que preservará el comportamiento predeterminado para los métodos que no están implementados:

class CustomMigrationStrategy < ActiveRecord::Migration::DefaultStrategy
  def drop_table(*)
    raise "¡No se admite eliminar tablas!"
  end
end

config.active_record.migration_strategy = CustomMigrationStrategy

3.8.18 config.active_record.lock_optimistically

Controla si Active Record usará bloqueo optimista y es true por defecto.

3.8.19 config.active_record.cache_timestamp_format

Controla el formato del valor de la marca de tiempo en la clave de caché. El valor predeterminado es :usec.

3.8.20 config.active_record.record_timestamps

Es un valor booleano que controla si se realiza o no el registro de marcas de tiempo de las operaciones de create y update en un modelo. El valor predeterminado es true.

3.8.21 config.active_record.partial_inserts

Es un valor booleano y controla si se utilizan o no escrituras parciales al crear nuevos registros (es decir, si las inserciones solo establecen atributos que son diferentes del valor predeterminado).

El valor predeterminado depende de la versión de destino de config.load_defaults:

A partir de la versión El valor predeterminado es
(original) true
7.0 false

3.8.22 config.active_record.partial_updates

Es un valor booleano y controla si se utilizan o no escrituras parciales al actualizar registros existentes (es decir, si las actualizaciones solo establecen atributos que están sucios). Ten en cuenta que al usar actualizaciones parciales, también debes usar bloqueo optimista config.active_record.lock_optimistically ya que las actualizaciones concurrentes pueden escribir atributos basados en un estado de lectura posiblemente obsoleto. El valor predeterminado es true.

3.8.23 config.active_record.maintain_test_schema

Es un valor booleano que controla si Active Record debe intentar mantener actualizado el esquema de tu base de datos de pruebas con db/schema.rb (o db/structure.sql) cuando ejecutas tus pruebas. El valor predeterminado es true.

3.8.24 config.active_record.dump_schema_after_migration

Es una bandera que controla si debe ocurrir o no el volcado de esquema (db/schema.rb o db/structure.sql) cuando ejecutas migraciones. Esto se establece en false en config/environments/production.rb que es generado por Rails. El valor predeterminado es true si esta configuración no está establecida.

3.8.25 config.active_record.dump_schemas

Controla qué esquemas de base de datos se volcarán al llamar a db:schema:dump. Las opciones son :schema_search_path (el valor predeterminado) que vuelca cualquier esquema listado en schema_search_path, :all que siempre vuelca todos los esquemas independientemente del schema_search_path, o una cadena de esquemas separados por comas.

3.8.26 config.active_record.before_committed_on_all_records

Habilita los callbacks before_committed! en todos los registros inscritos en una transacción. El comportamiento anterior era ejecutar los callbacks solo en la primera copia de un registro si había múltiples copias del mismo registro inscritas en la transacción.

A partir de la versión El valor predeterminado es
(original) false
7.1 true

3.8.27 config.active_record.belongs_to_required_by_default

Es un valor booleano y controla si un registro falla en la validación si la asociación belongs_to no está presente.

El valor predeterminado depende de la versión de destino de config.load_defaults:

A partir de la versión El valor predeterminado es
(original) nil
5.0 true

3.8.28 config.active_record.belongs_to_required_validates_foreign_key

Habilita la validación solo de columnas relacionadas con el padre para la presencia cuando el padre es obligatorio. El comportamiento anterior era validar la presencia del registro padre, lo que realizaba una consulta adicional para obtener el padre cada vez que se actualizaba el registro hijo, incluso cuando el padre no había cambiado.

A partir de la versión El valor predeterminado es
(original) true
7.1 false

3.8.29 config.active_record.marshalling_format_version

Cuando se establece en 7.1, habilita una serialización más eficiente de la instancia de Active Record con Marshal.dump.

Esto cambia el formato de serialización, por lo que los modelos serializados de esta manera no pueden ser leídos por versiones anteriores (< 7.1) de Rails. Sin embargo, los mensajes que usan el formato antiguo aún pueden ser leídos, independientemente de si esta optimización está habilitada.

A partir de la versión El valor predeterminado es
(original) 6.1
7.1 7.1

3.8.30 config.active_record.action_on_strict_loading_violation

Habilita la generación o el registro de una excepción si strict_loading está establecido en una asociación. El valor predeterminado es :raise en todos los entornos. Se puede cambiar a :log para enviar violaciones al logger en lugar de generar.

3.8.31 config.active_record.strict_loading_by_default

Es un valor booleano que habilita o deshabilita el modo strict_loading por defecto. El valor predeterminado es false.

3.8.32 config.active_record.warn_on_records_fetched_greater_than

Permite establecer un umbral de advertencia para el tamaño del resultado de la consulta. Si el número de registros devueltos por una consulta excede el umbral, se registra una advertencia. Esto se puede usar para identificar consultas que podrían estar causando un aumento de memoria.

3.8.33 config.active_record.index_nested_attribute_errors

Permite que los errores para relaciones has_many anidadas se muestren con un índice además del error. El valor predeterminado es false.

3.8.34 config.active_record.use_schema_cache_dump

Permite a los usuarios obtener información de caché de esquema de db/schema_cache.yml (generado por bin/rails db:schema:cache:dump), en lugar de tener que enviar una consulta a la base de datos para obtener esta información. El valor predeterminado es true.

3.8.35 config.active_record.cache_versioning

Indica si se debe usar un método estable #cache_key que esté acompañado por una versión cambiante en el método #cache_version.

El valor predeterminado depende de la versión de destino de config.load_defaults:

A partir de la versión El valor predeterminado es
(original) false
5.2 true

3.8.36 config.active_record.collection_cache_versioning

Habilita el uso de la misma clave de caché cuando el objeto que se está almacenando en caché de tipo ActiveRecord::Relation cambia al mover la información volátil (máxima actualización en y conteo) de la clave de caché de la relación a la versión de caché para soportar el reciclaje de claves de caché.

El valor predeterminado depende de la versión de destino de config.load_defaults:

A partir de la versión El valor predeterminado es
(original) false
6.0 true

3.8.37 config.active_record.has_many_inversing

Habilita el establecimiento del registro inverso al recorrer asociaciones belongs_to a has_many.

El valor predeterminado depende de la versión de destino de config.load_defaults:

A partir de la versión El valor predeterminado es
(original) false
6.1 true

3.8.38 config.active_record.automatic_scope_inversing

Habilita la inferencia automática de inverse_of para asociaciones con un alcance.

El valor predeterminado depende de la versión de destino de config.load_defaults:

A partir de la versión El valor predeterminado es
(original) false
7.0 true

3.8.39 config.active_record.destroy_association_async_job

Permite especificar el trabajo que se utilizará para destruir los registros asociados en segundo plano. El valor predeterminado es ActiveRecord::DestroyAssociationAsyncJob.

3.8.40 config.active_record.destroy_association_async_batch_size

Permite especificar el número máximo de registros que se destruirán en un trabajo en segundo plano mediante la opción de asociación dependent: :destroy_async. Todo lo demás igual, un tamaño de lote menor encolará más trabajos en segundo plano de corta duración, mientras que un tamaño de lote mayor encolará menos trabajos en segundo plano de larga duración. Esta opción predeterminada es nil, lo que hará que todos los registros dependientes de una asociación dada se destruyan en el mismo trabajo en segundo plano.

3.8.41 config.active_record.queues.destroy

Permite especificar la cola de Active Job para usar en trabajos de destrucción. Cuando esta opción es nil, los trabajos de purga se envían a la cola predeterminada de Active Job (ver config.active_job.default_queue_name). El valor predeterminado es nil.

3.8.42 config.active_record.enumerate_columns_in_select_statements

Cuando es true, siempre incluirá nombres de columnas en las declaraciones SELECT, y evitará consultas de comodín SELECT * FROM .... Esto evita errores de caché de declaraciones preparadas al agregar columnas a una base de datos PostgreSQL, por ejemplo. El valor predeterminado es false.

3.8.43 config.active_record.verify_foreign_keys_for_fixtures

Asegura que todas las restricciones de clave foránea sean válidas después de que se carguen los fixtures en las pruebas. Solo es compatible con PostgreSQL y SQLite.

El valor predeterminado depende de la versión de destino de config.load_defaults:

A partir de la versión El valor predeterminado es
(original) false
7.0 true

3.8.44 config.active_record.raise_on_assign_to_attr_readonly

Habilita la generación de una excepción al asignar a atributos attr_readonly. El comportamiento anterior permitía la asignación pero silenciosamente no persistía los cambios en la base de datos.

A partir de la versión El valor predeterminado es
(original) false
7.1 true

3.8.45 config.active_record.run_commit_callbacks_on_first_saved_instances_in_transaction

Cuando múltiples instancias de Active Record cambian el mismo registro dentro de una transacción, Rails ejecuta los callbacks after_commit o after_rollback solo para una de ellas. Esta opción especifica cómo Rails elige qué instancia recibe los callbacks.

Cuando es true, los callbacks transaccionales se ejecutan en la primera instancia que se guarda, incluso si su estado de instancia puede estar obsoleto.

Cuando es false, los callbacks transaccionales se ejecutan en las instancias con el estado de instancia más fresco. Esas instancias se eligen de la siguiente manera:

  • En general, ejecuta callbacks transaccionales en la última instancia que guarda un registro dado dentro de la transacción.
  • Hay dos excepciones:
    • Si el registro se crea dentro de la transacción, luego se actualiza por otra instancia, los callbacks after_create_commit se ejecutarán en la segunda instancia. Esto es en lugar de los callbacks after_update_commit que se ejecutarían ingenuamente basados en el estado de esa instancia.
    • Si el registro se destruye dentro de la transacción, entonces los callbacks after_destroy_commit se dispararán en la última instancia destruida, incluso si una instancia obsoleta realizó posteriormente una actualización (que afectará a 0 filas).

El valor predeterminado depende de la versión de destino de config.load_defaults:

A partir de la versión El valor predeterminado es
(original) true
7.1 false

3.8.46 config.active_record.default_column_serializer

La implementación del serializador a usar si no se especifica explícitamente para una columna dada.

Históricamente, serialize y store, aunque permiten usar implementaciones de serializador alternativas, usarían YAML por defecto, pero no es un formato muy eficiente y puede ser la fuente de vulnerabilidades de seguridad si no se emplea cuidadosamente.

Por lo tanto, se recomienda preferir formatos más estrictos y limitados para la serialización de bases de datos.

Desafortunadamente, no hay realmente ningún valor predeterminado adecuado disponible en la biblioteca estándar de Ruby. JSON podría funcionar como formato, pero las gemas json convertirán tipos no compatibles en cadenas, lo que puede llevar a errores.

El valor predeterminado depende de la versión de destino de config.load_defaults:

A partir de la versión El valor predeterminado es
(original) YAML
7.1 nil

3.8.47 config.active_record.run_after_transaction_callbacks_in_order_defined

Cuando es true, los callbacks after_commit se ejecutan en el orden en que se definen en un modelo. Cuando es false, se ejecutan en orden inverso.

Todos los demás callbacks siempre se ejecutan en el orden en que se definen en un modelo (a menos que uses prepend: true).

El valor predeterminado depende de la versión de destino de config.load_defaults:

A partir de la versión El valor predeterminado es
(original) false
7.1 true

3.8.48 config.active_record.query_log_tags_enabled

Especifica si habilitar o no los comentarios de consulta a nivel de adaptador. El valor predeterminado es false.

NOTA: Cuando esto se establece en true, las declaraciones preparadas de la base de datos se deshabilitarán automáticamente.

3.8.49 config.active_record.query_log_tags

Define un Array que especifica las etiquetas clave/valor que se insertarán en un comentario SQL. El valor predeterminado es [ :application, :controller, :action, :job ]. Las etiquetas disponibles son: :application, :controller, :namespaced_controller, :action, :job, y :source_location.

3.8.50 config.active_record.query_log_tags_format

Un Symbol que especifica el formateador a usar para las etiquetas. Los valores válidos son :sqlcommenter y :legacy.

El valor predeterminado depende de la versión de destino de config.load_defaults:

A partir de la versión El valor predeterminado es
(original) :legacy
7.1 :sqlcommenter

3.8.51 config.active_record.cache_query_log_tags

Especifica si habilitar o no el almacenamiento en caché de etiquetas de registro de consultas. Para aplicaciones que tienen un gran número de consultas, almacenar en caché las etiquetas de registro de consultas puede proporcionar un beneficio de rendimiento cuando el contexto no cambia durante la vida útil de la solicitud o ejecución del trabajo. El valor predeterminado es false.

3.8.52 config.active_record.schema_cache_ignored_tables

Define la lista de tablas que deben ser ignoradas al generar el caché de esquema. Acepta un Array de cadenas, que representan los nombres de las tablas, o expresiones regulares.

3.8.53 config.active_record.verbose_query_logs

Especifica si se deben registrar las ubicaciones de origen de los métodos que llaman a consultas de base de datos debajo de las consultas relevantes. Por defecto, la bandera es true en desarrollo y false en todos los demás entornos.

3.8.54 config.active_record.sqlite3_adapter_strict_strings_by_default

Especifica si el SQLite3Adapter debe usarse en un modo de cadenas estrictas. El uso de un modo de cadenas estrictas deshabilita los literales de cadena entre comillas dobles.

SQLite tiene algunas peculiaridades con respecto a los literales de cadena entre comillas dobles. Primero intenta considerar las cadenas entre comillas dobles como nombres de identificadores, pero si no existen, las considera como literales de cadena. Debido a esto, los errores tipográficos pueden pasar desapercibidos silenciosamente. Por ejemplo, es posible crear un índice para una columna no existente. Consulta la documentación de SQLite para más detalles.

El valor predeterminado depende de la versión de destino de config.load_defaults:

A partir de la versión El valor predeterminado es
(original) false
7.1 true

3.8.55 config.active_record.postgresql_adapter_decode_dates

Especifica si el PostgresqlAdapter debe decodificar columnas de fecha.

ActiveRecord::Base.connection
     .select_value("select '2024-01-01'::date").class #=> Date

El valor predeterminado depende de la versión de destino de config.load_defaults:

A partir de la versión El valor predeterminado es
(original) false
7.2 true

3.8.56 config.active_record.async_query_executor

Especifica cómo se agrupan las consultas asíncronas.

El valor predeterminado es nil, lo que significa que load_async está deshabilitado y en su lugar ejecuta directamente consultas en primer plano. Para que las consultas se realicen realmente de manera asíncrona, debe establecerse en :global_thread_pool o :multi_thread_pool.

:global_thread_pool usará un solo pool para todas las bases de datos a las que la aplicación se conecta. Esta es la configuración preferida para aplicaciones con solo una base de datos, o aplicaciones que solo consultan un fragmento de base de datos a la vez.

:multi_thread_pool usará un pool por base de datos, y el tamaño de cada pool se puede configurar individualmente en database.yml a través de las propiedades max_threads y min_thread. Esto puede ser útil para aplicaciones que consultan regularmente múltiples bases de datos a la vez, y que necesitan definir más precisamente la concurrencia máxima.

3.8.57 config.active_record.global_executor_concurrency

Utilizado junto con config.active_record.async_query_executor = :global_thread_pool, define cuántas consultas asíncronas se pueden ejecutar concurrentemente.

El valor predeterminado es 4.

Este número debe considerarse de acuerdo con el tamaño del pool de conexiones de la base de datos configurado en database.yml. El pool de conexiones debe ser lo suficientemente grande como para acomodar tanto los hilos de primer plano (es decir, hilos de servidor web o de trabajador de trabajo) como los hilos de fondo.

Para cada proceso, Rails creará un ejecutor de consultas global que utiliza esta cantidad de hilos para procesar consultas asíncronas. Por lo tanto, el tamaño del pool debe ser al menos thread_count + global_executor_concurrency + 1. Por ejemplo, si tu servidor web tiene un máximo de 3 hilos, y global_executor_concurrency está establecido en 4, entonces el tamaño del pool debe ser al menos 8.

3.8.58 config.active_record.yaml_column_permitted_classes

El valor predeterminado es [Symbol]. Permite a las aplicaciones incluir clases adicionales permitidas en safe_load() en el ActiveRecord::Coders::YAMLColumn.

3.8.59 config.active_record.use_yaml_unsafe_load

El valor predeterminado es false. Permite a las aplicaciones optar por usar unsafe_load en el ActiveRecord::Coders::YAMLColumn.

3.8.60 config.active_record.raise_int_wider_than_64bit

El valor predeterminado es true. Determina si se debe generar una excepción o no cuando el adaptador de PostgreSQL recibe un entero que es más amplio que la representación de 64 bits con signo.

3.8.61 config.active_record.generate_secure_token_on

Controla cuándo generar un valor para las declaraciones has_secure_token. Por defecto, genera el valor cuando se inicializa el modelo:

class User < ApplicationRecord
  has_secure_token
end

record = User.new
record.token # => "fwZcXX6SkJBJRogzMdciS7wf"

Con config.active_record.generate_secure_token_on = :create, genera el valor cuando se crea el modelo:

# config/application.rb

config.active_record.generate_secure_token_on = :create

# app/models/user.rb
class User < ApplicationRecord
  has_secure_token on: :create
end

record = User.new
record.token # => nil
record.save!
record.token # => "fwZcXX6SkJBJRogzMdciS7wf"
A partir de la versión El valor predeterminado es
(original) :create
7.1 :initialize

3.8.62 config.active_record.permanent_connection_checkout

Controla si ActiveRecord::Base.connection genera un error, emite una advertencia de desaprobación o ninguno de los dos.

ActiveRecord::Base.connection saca una conexión de base de datos del pool y la mantiene alquilada hasta el final de la solicitud o trabajo. Este comportamiento puede ser indeseable en entornos que usan muchos más hilos o fibras de los que hay conexiones disponibles.

Esta configuración se puede usar para rastrear y eliminar código que llama a ActiveRecord::Base.connection y migrarlo para usar ActiveRecord::Base.with_connection en su lugar.

El valor se puede establecer en :disallowed, :deprecated, o true para respectivamente generar un error, emitir una advertencia de desaprobación, o ninguno.

A partir de la versión El valor predeterminado es
(original) true

3.8.63 ActiveRecord::ConnectionAdapters::Mysql2Adapter.emulate_booleans y ActiveRecord::ConnectionAdapters::TrilogyAdapter.emulate_booleans

Controla si el adaptador MySQL de Active Record considerará todas las columnas tinyint(1) como booleanas. El valor predeterminado es true.

3.8.64 ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.create_unlogged_tables

Controla si las tablas de base de datos creadas por PostgreSQL deben ser "no registradas", lo que puede acelerar el rendimiento pero agrega un riesgo de pérdida de datos si la base de datos falla. Se recomienda encarecidamente no habilitar esto en un entorno de producción. El valor predeterminado es false en todos los entornos.

Para habilitar esto en pruebas:

# config/environments/test.rb

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

3.8.65 ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.datetime_type

Controla qué tipo nativo debe usar el adaptador de PostgreSQL de Active Record cuando llamas a datetime en una migración o esquema. Toma un símbolo que debe corresponder a uno de los NATIVE_DATABASE_TYPES configurados. El valor predeterminado es :timestamp, lo que significa que t.datetime en una migración creará una columna "timestamp sin zona horaria".

Para usar "timestamp con zona horaria":

# config/application.rb

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

Debes ejecutar bin/rails db:migrate para reconstruir tu schema.rb si cambias esto.

3.8.66 ActiveRecord::SchemaDumper.ignore_tables

Acepta una matriz de tablas que no deben incluirse en ningún archivo de esquema generado.

3.8.67 ActiveRecord::SchemaDumper.fk_ignore_pattern

Permite establecer una expresión regular diferente que se usará para decidir si el nombre de una clave foránea debe volcarse en db/schema.rb o no. Por defecto, los nombres de clave foránea que comienzan con fk_rails_ no se exportan al volcado de esquema de base de datos. El valor predeterminado es /^fk_rails_[0-9a-f]{10}$/.

3.8.68 config.active_record.encryption.add_to_filter_parameters

Habilita el filtrado automático de atributos encriptados en inspect.

El valor predeterminado es true.

3.8.69 config.active_record.encryption.hash_digest_class

Establece el algoritmo de digestión utilizado por Active Record Encryption.

El valor predeterminado depende de la versión de destino de config.load_defaults:

A partir de la versión El valor predeterminado es
(original) OpenSSL::Digest::SHA1
7.1 OpenSSL::Digest::SHA256

3.8.70 config.active_record.encryption.support_sha1_for_non_deterministic_encryption

Habilita el soporte para descifrar datos existentes encriptados usando una clase de digestión SHA-1. Cuando es false, solo admitirá el digest configurado en config.active_record.encryption.hash_digest_class.

El valor predeterminado depende de la versión de destino de config.load_defaults:

A partir de la versión El valor predeterminado es
(original) true
7.1 false

3.8.71 config.active_record.protocol_adapters

Al usar una URL para configurar la conexión de la base de datos, esta opción proporciona un mapeo del protocolo al adaptador de base de datos subyacente. Por ejemplo, esto significa que el entorno puede especificar DATABASE_URL=mysql://localhost/database y Rails mapeará mysql al adaptador mysql2, pero la aplicación también puede anular estos mapeos:

config.active_record.protocol_adapters.mysql = "trilogy"

Si no se encuentra un mapeo, el protocolo se usa como el nombre del adaptador.

3.9 Configuración de Action Controller

config.action_controller incluye una serie de configuraciones:

3.9.1 config.action_controller.asset_host

Establece el host para los activos. Útil cuando se utilizan CDNs para alojar activos en lugar del servidor de aplicaciones en sí. Solo debes usar esto si tienes una configuración diferente para Action Mailer, de lo contrario, usa config.asset_host.

3.9.2 config.action_controller.perform_caching

Configura si la aplicación debe realizar las funciones de caché proporcionadas por el componente Action Controller o no. Establecer en false en el entorno de desarrollo, true en producción. Si no se especifica, el valor predeterminado será true.

3.9.3 config.action_controller.default_static_extension

Configura la extensión utilizada para las páginas en caché. El valor predeterminado es .html.

3.9.4 config.action_controller.include_all_helpers

Configura si todos los ayudantes de vista están disponibles en todas partes o están limitados al controlador correspondiente. Si se establece en false, los métodos de UsersHelper solo están disponibles para las vistas renderizadas como parte de UsersController. Si es true, los métodos de UsersHelper están disponibles en todas partes. El comportamiento de configuración predeterminado (cuando esta opción no se establece explícitamente en true o false) es que todos los ayudantes de vista están disponibles para cada controlador.

3.9.5 config.action_controller.logger

Acepta un logger que cumpla con la interfaz de Log4r o la clase predeterminada Ruby Logger, que luego se utiliza para registrar información de Action Controller. Establecer en nil para deshabilitar el registro.

3.9.6 config.action_controller.request_forgery_protection_token

Establece el nombre del parámetro de token para RequestForgery. Llamar a protect_from_forgery lo establece en :authenticity_token por defecto.

3.9.7 config.action_controller.allow_forgery_protection

Habilita o deshabilita la protección CSRF. Por defecto, esto es false en el entorno de prueba y true en todos los demás entornos.

3.9.8 config.action_controller.forgery_protection_origin_check

Configura si el encabezado HTTP Origin debe verificarse contra el origen del sitio como una defensa CSRF adicional.

El valor predeterminado depende de la versión de destino de config.load_defaults:

A partir de la versión El valor predeterminado es
(original) false
5.0 true

3.9.9 config.action_controller.per_form_csrf_tokens

Configura si los tokens CSRF son válidos solo para el método/acción para los que fueron generados.

El valor predeterminado depende de la versión de destino de config.load_defaults:

A partir de la versión El valor predeterminado es
(original) false
5.0 true

3.9.10 config.action_controller.default_protect_from_forgery

Determina si se agrega protección contra falsificación en ActionController::Base.

El valor predeterminado depende de la versión de destino de config.load_defaults:

A partir de la versión El valor predeterminado es
(original) false
5.2 true

3.9.11 config.action_controller.relative_url_root

Se puede usar para decirle a Rails que estás desplegando en un subdirectorio. El valor predeterminado es config.relative_url_root.

3.9.12 config.action_controller.permit_all_parameters

Establece que todos los parámetros para la asignación masiva estén permitidos por defecto. El valor predeterminado es false.

3.9.13 config.action_controller.action_on_unpermitted_parameters

Controla el comportamiento cuando se encuentran parámetros que no están explícitamente permitidos. El valor predeterminado es :log en los entornos de prueba y desarrollo, false de lo contrario. Los valores pueden ser:

  • false para no tomar ninguna acción
  • :log para emitir un evento ActiveSupport::Notifications.instrument en el tema unpermitted_parameters.action_controller y registrar en el nivel DEBUG
  • :raise para generar una excepción ActionController::UnpermittedParameters

3.9.14 config.action_controller.always_permitted_parameters

Establece una lista de parámetros permitidos que están permitidos por defecto. Los valores predeterminados son ['controller', 'action'].

3.9.15 config.action_controller.enable_fragment_cache_logging

Determina si se deben registrar las lecturas y escrituras de caché de fragmentos en formato detallado como se muestra a continuación:

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]

Por defecto, está establecido en false, lo que da como resultado la siguiente salida:

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

3.9.16 config.action_controller.raise_on_missing_callback_actions

Genera un AbstractController::ActionNotFound cuando la acción especificada en las opciones :only o :except del callback falta en el controlador.

A partir de la versión El valor predeterminado es
(original) false
7.1 true (desarrollo y prueba), false (otros entornos)

3.9.17 config.action_controller.raise_on_open_redirects

Protege una aplicación de redirigir inadvertidamente a un host externo (también conocido como "redirección abierta") haciendo que las redirecciones externas sean optativas.

Cuando esta configuración se establece en true, se generará un ActionController::Redirecting::UnsafeRedirectError cuando se pase una URL con un host externo a redirect_to. Si se debe permitir una redirección abierta, entonces allow_other_host: true se puede agregar a la llamada a redirect_to.

El valor predeterminado depende de la versión de destino de config.load_defaults:

A partir de la versión El valor predeterminado es
(original) false
7.0 true

3.9.18 config.action_controller.log_query_tags_around_actions

Determina si el contexto del controlador para las etiquetas de consulta se actualizará automáticamente a través de un around_filter. El valor predeterminado es true.

3.9.19 config.action_controller.wrap_parameters_by_default

Antes de Rails 7.0, las nuevas aplicaciones se generaban con un inicializador llamado wrap_parameters.rb que habilitaba el envoltorio de parámetros en ActionController::Base para solicitudes JSON.

Establecer este valor de configuración en true tiene el mismo comportamiento que el inicializador, lo que permite a las aplicaciones eliminar el inicializador si no desean personalizar el comportamiento de envoltorio de parámetros.

Independientemente de este valor, las aplicaciones pueden seguir personalizando el comportamiento de envoltorio de parámetros como antes en un inicializador o por controlador.

Consulta ParamsWrapper para obtener más información sobre el envoltorio de parámetros.

El valor predeterminado depende de la versión de destino de config.load_defaults:

A partir de la versión El valor predeterminado es
(original) false
7.0 true

3.9.20 ActionController::Base.wrap_parameters

Configura el ParamsWrapper. Esto se puede llamar a nivel superior o en controladores individuales.

3.10 Configuración de Action Dispatch

3.10.1 config.action_dispatch.cookies_serializer

Especifica qué serializador usar para las cookies. Acepta los mismos valores que config.active_support.message_serializer, además de :hybrid que es un alias para :json_allow_marshal.

El valor predeterminado depende de la versión de destino de config.load_defaults:

A partir de la versión El valor predeterminado es
(original) :marshal
7.0 :json

3.10.2 config.action_dispatch.debug_exception_log_level

Configura el nivel de registro utilizado por el middleware ActionDispatch::DebugExceptions al registrar excepciones no capturadas durante las solicitudes.

El valor predeterminado depende de la versión de destino de config.load_defaults:

A partir de la versión El valor predeterminado es
(original) :fatal
7.1 :error

3.10.3 config.action_dispatch.default_headers

Es un hash con encabezados HTTP que se establecen por defecto en cada respuesta.

El valor predeterminado depende de la versión de destino de config.load_defaults:

A partir de la versión El valor predeterminado es
(original)
{
"X-Frame-Options" => "SAMEORIGIN",
"X-XSS-Protection" => "1; mode=block",
"X-Content-Type-Options" => "nosniff",
"X-Download-Options" => "noopen",
"X-Permitted-Cross-Domain-Policies" => "none",
"Referrer-Policy" => "strict-origin-when-cross-origin"
}
7.0
{
"X-Frame-Options" => "SAMEORIGIN",
"X-XSS-Protection" => "0",
"X-Content-Type-Options" => "nosniff",
"X-Download-Options" => "noopen",
"X-Permitted-Cross-Domain-Policies" => "none",
"Referrer-Policy" => "strict-origin-when-cross-origin"
}
7.1
{
"X-Frame-Options" => "SAMEORIGIN",
"X-XSS-Protection" => "0",
"X-Content-Type-Options" => "nosniff",
"X-Permitted-Cross-Domain-Policies" => "none",
"Referrer-Policy" => "strict-origin-when-cross-origin"
}

3.10.4 config.action_dispatch.default_charset

Especifica el conjunto de caracteres predeterminado para todas las representaciones. El valor predeterminado es nil.

3.10.5 config.action_dispatch.tld_length

Establece la longitud del TLD (dominio de nivel superior) para la aplicación. El valor predeterminado es 1.

3.10.6 config.action_dispatch.ignore_accept_header

Se usa para determinar si se deben ignorar los encabezados de aceptación de una solicitud. El valor predeterminado es false.

3.10.7 config.action_dispatch.x_sendfile_header

Especifica el encabezado X-Sendfile específico del servidor. Esto es útil para el envío acelerado de archivos desde el servidor. Por ejemplo, se puede establecer en 'X-Sendfile' para Apache.

3.10.8 config.action_dispatch.http_auth_salt

Establece el valor de sal de autenticación HTTP. El valor predeterminado es 'http authentication'.

Establece el valor de sal para cookies firmadas. El valor predeterminado es 'signed cookie'.

Establece el valor de sal para cookies encriptadas. El valor predeterminado es 'encrypted cookie'.

Establece el valor de sal para cookies firmadas y encriptadas. El valor predeterminado es 'signed encrypted cookie'.

Establece el valor de sal para cookies encriptadas autenticadas. El valor predeterminado es 'authenticated encrypted cookie'.

Establece el cifrado a utilizar para cookies encriptadas. El valor predeterminado es "aes-256-gcm".

Establece el digest a utilizar para cookies firmadas. El valor predeterminado es "SHA1".

3.10.15 config.action_dispatch.cookies_rotations

Permite rotar secretos, cifrados y digests para cookies firmadas y encriptadas.

Controla si las cookies firmadas y encriptadas usan el cifrado AES-256-GCM o el cifrado más antiguo AES-256-CBC.

El valor predeterminado depende de la versión de destino de config.load_defaults:

A partir de la versión El valor predeterminado es
(original) false
5.2 true

3.10.17 config.action_dispatch.use_cookies_with_metadata

Habilita la escritura de cookies con los metadatos de propósito incrustados.

El valor predeterminado depende de la versión de destino de config.load_defaults:

A partir de la versión El valor predeterminado es
(original) false
6.0 true

3.10.18 config.action_dispatch.perform_deep_munge

Configura si el método deep_munge debe realizarse en los parámetros. Consulte la Guía de Seguridad para obtener más información. Por defecto es true.

3.10.19 config.action_dispatch.rescue_responses

Configura qué excepciones se asignan a un estado HTTP. Acepta un hash y puede especificar pares de excepción/estado.

# Es recomendable usar #[]= o #merge! para respetar los valores predeterminados
config.action_dispatch.rescue_responses['MyAuthenticationError'] = :unauthorized

Utilice ActionDispatch::ExceptionWrapper.rescue_responses para observar la configuración. Por defecto, está definido como:

{
  '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,
  'ActionDispatch::Http::MimeNegotiation::InvalidType' => :not_acceptable,
  'ActionController::MissingExactTemplate' => :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
}

Cualquier excepción que no esté configurada se mapeará a un error interno del servidor 500.

3.10.20 config.action_dispatch.cookies_same_site_protection

Configura el valor predeterminado del atributo SameSite al establecer cookies. Cuando se establece en nil, el atributo SameSite no se agrega. Para permitir que el valor del atributo SameSite se configure dinámicamente según la solicitud, se puede especificar un proc. Por ejemplo:

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

El valor predeterminado depende de la versión objetivo de config.load_defaults:

Comenzando con la versión El valor predeterminado es
(original) nil
6.1 :lax

3.10.21 config.action_dispatch.ssl_default_redirect_status

Configura el código de estado HTTP predeterminado utilizado al redirigir solicitudes no GET/HEAD de HTTP a HTTPS en el middleware ActionDispatch::SSL.

El valor predeterminado depende de la versión objetivo de config.load_defaults:

Comenzando con la versión El valor predeterminado es
(original) 307
6.1 308

3.10.22 config.action_dispatch.log_rescued_responses

Permite registrar aquellas excepciones no manejadas configuradas en rescue_responses. Por defecto es true.

3.10.23 config.action_dispatch.show_exceptions

La configuración config.action_dispatch.show_exceptions controla cómo Action Pack (específicamente el middleware ActionDispatch::ShowExceptions) maneja las excepciones generadas al responder a solicitudes.

Establecer el valor en :all configura Action Pack para rescatar de excepciones y renderizar las páginas de error correspondientes. Por ejemplo, Action Pack rescataría de una excepción ActiveRecord::RecordNotFound y renderizaría el contenido de public/404.html con un código de estado 404 Not found.

Establecer el valor en :rescuable configura Action Pack para rescatar de excepciones definidas en config.action_dispatch.rescue_responses y elevar todas las demás. Por ejemplo, Action Pack rescataría de ActiveRecord::RecordNotFound, pero elevaría un NoMethodError.

Establecer el valor en :none configura Action Pack para elevar todas las excepciones.

  • :all - renderizar páginas de error para todas las excepciones
  • :rescuable - renderizar páginas de error para excepciones declaradas por config.action_dispatch.rescue_responses
  • :none - elevar todas las excepciones
Comenzando con la versión El valor predeterminado es
(original) true
7.1 :all

Las cookies se escribirán al final de una solicitud si están marcadas como inseguras, si la solicitud se realiza a través de SSL o si la solicitud se realiza a un servicio onion.

Si se establece en true, las cookies se escribirán incluso si no se cumple este criterio.

Por defecto es true en development, y false en todos los demás entornos.

3.10.25 ActionDispatch::Callbacks.before

Toma un bloque de código para ejecutar antes de la solicitud.

3.10.26 ActionDispatch::Callbacks.after

Toma un bloque de código para ejecutar después de la solicitud.

3.11 Configuración de Action View

config.action_view incluye un pequeño número de configuraciones:

3.11.1 config.action_view.cache_template_loading

Controla si las plantillas deben recargarse en cada solicitud. Por defecto es !config.enable_reloading.

3.11.2 config.action_view.field_error_proc

Proporciona un generador de HTML para mostrar errores que provienen de Active Model. El bloque se evalúa dentro del contexto de una plantilla de Action View. El valor predeterminado es

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

3.11.3 config.action_view.default_form_builder

Indica a Rails qué constructor de formularios usar por defecto. El valor predeterminado es ActionView::Helpers::FormBuilder. Si desea que su clase de constructor de formularios se cargue después de la inicialización (para que se recargue en cada solicitud en desarrollo), puede pasarla como un String.

3.11.4 config.action_view.logger

Acepta un registrador que cumpla con la interfaz de Log4r o la clase predeterminada de Logger de Ruby, que luego se utiliza para registrar información de Action View. Establezca en nil para deshabilitar el registro.

3.11.5 config.action_view.erb_trim_mode

Controla si cierta sintaxis de ERB debe recortar. Por defecto es '-', lo que activa el recorte de espacios y nueva línea al final al usar <%= -%> o <%= =%>. Establecer esto en cualquier otra cosa desactivará el soporte de recorte.

3.11.6 config.action_view.frozen_string_literal

Compila la plantilla ERB con el comentario mágico # frozen_string_literal: true, haciendo que todos los literales de cadena estén congelados y ahorrando asignaciones. Establezca en true para habilitarlo para todas las vistas.

3.11.7 config.action_view.embed_authenticity_token_in_remote_forms

Permite establecer el comportamiento predeterminado para authenticity_token en formularios con remote: true. Por defecto está establecido en false, lo que significa que los formularios remotos no incluirán authenticity_token, lo cual es útil cuando está almacenando en caché el fragmento del formulario. Los formularios remotos obtienen la autenticidad de la etiqueta meta, por lo que la inclusión es innecesaria a menos que soporte navegadores sin JavaScript. En tal caso, puede pasar authenticity_token: true como una opción de formulario o establecer esta configuración en true.

3.11.8 config.action_view.prefix_partial_path_with_controller_namespace

Determina si las partes se buscan desde un subdirectorio en plantillas renderizadas desde controladores con espacio de nombres. Por ejemplo, considere un controlador llamado Admin::ArticlesController que renderiza esta plantilla:

<%= render @article %>

La configuración predeterminada es true, que utiliza la parte en /admin/articles/_article.erb. Establecer el valor en false renderizaría /articles/_article.erb, que es el mismo comportamiento que renderizar desde un controlador sin espacio de nombres como ArticlesController.

3.11.9 config.action_view.automatically_disable_submit_tag

Determina si submit_tag debe deshabilitarse automáticamente al hacer clic, esto por defecto es true.

3.11.10 config.action_view.debug_missing_translation

Determina si envolver la clave de traducciones faltantes en una etiqueta <span> o no. Esto por defecto es true.

3.11.11 config.action_view.form_with_generates_remote_forms

Determina si form_with genera formularios remotos o no.

El valor predeterminado depende de la versión objetivo de config.load_defaults:

Comenzando con la versión El valor predeterminado es
5.1 true
6.1 false

3.11.12 config.action_view.form_with_generates_ids

Determina si form_with genera identificadores en los inputs.

El valor predeterminado depende de la versión objetivo de config.load_defaults:

Comenzando con la versión El valor predeterminado es
(original) false
5.2 true

3.11.13 config.action_view.default_enforce_utf8

Determina si los formularios se generan con una etiqueta oculta que obliga a las versiones anteriores de Internet Explorer a enviar formularios codificados en UTF-8.

El valor predeterminado depende de la versión objetivo de config.load_defaults:

Comenzando con la versión El valor predeterminado es
(original) true
6.0 false

3.11.14 config.action_view.image_loading

Especifica un valor predeterminado para el atributo loading de las etiquetas <img> renderizadas por el helper image_tag. Por ejemplo, cuando se establece en "lazy", las etiquetas <img> renderizadas por image_tag incluirán loading="lazy", lo que instruye al navegador para que espere hasta que una imagen esté cerca del área de visualización para cargarla. (Este valor aún se puede anular por imagen pasando, por ejemplo, loading: "eager" a image_tag). Por defecto es nil.

3.11.15 config.action_view.image_decoding

Especifica un valor predeterminado para el atributo decoding de las etiquetas <img> renderizadas por el helper image_tag. Por defecto es nil.

3.11.16 config.action_view.annotate_rendered_view_with_filenames

Determina si se debe anotar la vista renderizada con los nombres de archivo de la plantilla. Esto por defecto es false.

Determina si javascript_include_tag y stylesheet_link_tag generarán un encabezado link que precarga los activos.

El valor predeterminado depende de la versión objetivo de config.load_defaults:

Comenzando con la versión El valor predeterminado es
(original) nil
6.1 true

3.11.18 config.action_view.button_to_generates_button_tag

Cuando es false, button_to renderizará un <button> o un <input> dentro de un <form> dependiendo de cómo se pase el contenido (<form> omitido por brevedad):

<%= button_to "Content", "/" %>
# => <input type="submit" value="Content">

<%= button_to "/" do %>
  Content
<% end %>
# => <button type="submit">Content</button>

Establecer este valor en true hace que button_to genere una etiqueta <button> dentro del <form> en ambos casos.

El valor predeterminado depende de la versión objetivo de config.load_defaults:

Comenzando con la versión El valor predeterminado es
(original) false
7.0 true

3.11.19 config.action_view.apply_stylesheet_media_default

Determina si stylesheet_link_tag renderizará screen como el valor predeterminado para el atributo media cuando no se proporcione.

El valor predeterminado depende de la versión objetivo de config.load_defaults:

Comenzando con la versión El valor predeterminado es
(original) true
7.0 false

3.11.20 config.action_view.prepend_content_exfiltration_prevention

Determina si los helpers form_tag y button_to producirán etiquetas HTML precedidas de HTML seguro para el navegador (pero técnicamente inválido) que garantiza que su contenido no pueda ser capturado por ninguna etiqueta sin cerrar anterior. El valor predeterminado es false.

3.11.21 config.action_view.sanitizer_vendor

Configura el conjunto de sanitizadores HTML utilizados por Action View configurando ActionView::Helpers::SanitizeHelper.sanitizer_vendor. El valor predeterminado depende de la versión objetivo de config.load_defaults:

Comenzando con la versión El valor predeterminado es Qué analiza el marcado como
(original) Rails::HTML4::Sanitizer HTML4
7.1 Rails::HTML5::Sanitizer (ver NOTA) HTML5

NOTA: Rails::HTML5::Sanitizer no es compatible con JRuby, por lo que en plataformas JRuby Rails recurrirá a Rails::HTML4::Sanitizer.

3.12 Configuración de Action Mailbox

config.action_mailbox proporciona las siguientes opciones de configuración:

3.12.1 config.action_mailbox.logger

Contiene el registrador utilizado por Action Mailbox. Acepta un registrador que cumpla con la interfaz de Log4r o la clase predeterminada de Logger de Ruby. El valor predeterminado es Rails.logger.

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

3.12.2 config.action_mailbox.incinerate_after

Acepta un ActiveSupport::Duration que indica cuánto tiempo después del procesamiento deben destruirse los registros ActionMailbox::InboundEmail. Por defecto es 30.days.

# Incinerar correos electrónicos entrantes 14 días después del procesamiento.
config.action_mailbox.incinerate_after = 14.days

3.12.3 config.action_mailbox.queues.incineration

Acepta un símbolo que indica la cola de Active Job a utilizar para trabajos de incineración. Cuando esta opción es nil, los trabajos de incineración se envían a la cola predeterminada de Active Job (ver config.active_job.default_queue_name) .

El valor predeterminado depende de la versión objetivo de config.load_defaults:

Comenzando con la versión El valor predeterminado es
(original) :action_mailbox_incineration
6.1 nil

3.12.4 config.action_mailbox.queues.routing

Acepta un símbolo que indica la cola de Active Job a utilizar para trabajos de enrutamiento. Cuando esta opción es nil, los trabajos de enrutamiento se envían a la cola predeterminada de Active Job (ver config.active_job.default_queue_name) .

El valor predeterminado depende de la versión objetivo de config.load_defaults:

Comenzando con la versión El valor predeterminado es
(original) :action_mailbox_routing
6.1 nil

3.12.5 config.action_mailbox.storage_service

Acepta un símbolo que indica el servicio de Active Storage a utilizar para cargar correos electrónicos. Cuando esta opción es nil, los correos electrónicos se cargan en el servicio predeterminado de Active Storage (ver config.active_storage.service).

3.13 Configuración de Action Mailer

Hay una serie de configuraciones disponibles en config.action_mailer:

3.13.1 config.action_mailer.asset_host

Establece el host para los activos. Útil cuando se utilizan CDNs para alojar activos en lugar del servidor de aplicaciones en sí. Debe usar esto solo si tiene una configuración diferente para Action Controller, de lo contrario use config.asset_host.

3.13.2 config.action_mailer.logger

Acepta un registrador que cumpla con la interfaz de Log4r o la clase predeterminada de Logger de Ruby, que luego se utiliza para registrar información de Action Mailer. Establezca en nil para deshabilitar el registro.

3.13.3 config.action_mailer.smtp_settings

Permite una configuración detallada para el método de entrega :smtp. Acepta un hash de opciones, que puede incluir cualquiera de estas opciones:

  • :address - Permite usar un servidor de correo remoto. Simplemente cámbielo de su configuración predeterminada "localhost".
  • :port - En el caso de que su servidor de correo no funcione en el puerto 25, puede cambiarlo.
  • :domain - Si necesita especificar un dominio HELO, puede hacerlo aquí.
  • :user_name - Si su servidor de correo requiere autenticación, establezca el nombre de usuario en esta configuración.
  • :password - Si su servidor de correo requiere autenticación, establezca la contraseña en esta configuración.
  • :authentication - Si su servidor de correo requiere autenticación, debe especificar el tipo de autenticación aquí. Esto es un símbolo y uno de :plain, :login, :cram_md5.
  • :enable_starttls - Use STARTTLS al conectarse a su servidor SMTP y falle si no es compatible. Por defecto es false.
  • :enable_starttls_auto - Detecta si STARTTLS está habilitado en su servidor SMTP y comienza a usarlo. Por defecto es true.
  • :openssl_verify_mode - Al usar TLS, puede establecer cómo OpenSSL verifica el certificado. Esto es útil si necesita validar un certificado autofirmado y/o un certificado comodín. Esto puede ser uno de los constantes de verificación de OpenSSL, :none o :peer -- o la constante directamente OpenSSL::SSL::VERIFY_NONE o OpenSSL::SSL::VERIFY_PEER, respectivamente.
  • :ssl/:tls - Habilita la conexión SMTP para usar SMTP/TLS (SMTPS: SMTP sobre conexión TLS directa).
  • :open_timeout - Número de segundos para esperar mientras se intenta abrir una conexión.
  • :read_timeout - Número de segundos para esperar hasta que se agote el tiempo de espera de una llamada read(2).

Además, es posible pasar cualquier opción de configuración que respete Mail::SMTP.

3.13.4 config.action_mailer.smtp_timeout

Antes de la versión 2.8.0, el gem mail no configuraba ningún tiempo de espera predeterminado para sus solicitudes SMTP. Esta configuración permite a las aplicaciones configurar valores predeterminados para :open_timeout y :read_timeout en el gem mail para que las solicitudes no se queden atascadas indefinidamente.

El valor predeterminado depende de la versión objetivo de config.load_defaults:

Comenzando con la versión El valor predeterminado es
(original) nil
7.0 5

3.13.5 config.action_mailer.sendmail_settings

Permite una configuración detallada para el método de entrega :sendmail. Acepta un hash de opciones, que puede incluir cualquiera de estas opciones:

  • :location - La ubicación del ejecutable sendmail. Por defecto es /usr/sbin/sendmail.
  • :arguments - Los argumentos de la línea de comandos. Por defecto es %w[ -i ].

3.13.6 config.action_mailer.file_settings

Configura el método de entrega :file. Acepta un hash de opciones, que puede incluir:

  • :location - La ubicación donde se guardan los archivos. Por defecto es "#{Rails.root}/tmp/mails".
  • :extension - La extensión del archivo. Por defecto es la cadena vacía.

3.13.7 config.action_mailer.raise_delivery_errors

Especifica si se debe elevar un error si no se puede completar la entrega de correo electrónico. Por defecto es true.

3.13.8 config.action_mailer.delivery_method

Define el método de entrega y por defecto es :smtp. Consulte la sección de configuración en la guía de Action Mailer para obtener más información.

3.13.9 config.action_mailer.perform_deliveries

Especifica si el correo se entregará realmente y es true por defecto. Puede ser conveniente establecerlo en false para pruebas.

3.13.10 config.action_mailer.default_options

Configura los valores predeterminados de Action Mailer. Úselo para establecer opciones como from o reply_to para cada correo. Estos valores predeterminados son:

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

Asigne un hash para establecer opciones adicionales:

config.action_mailer.default_options = {
  from: "noreply@example.com"
}

3.13.11 config.action_mailer.observers

Registra observadores que serán notificados cuando se entregue el correo.

config.action_mailer.observers = ["MailObserver"]

3.13.12 config.action_mailer.interceptors

Registra interceptores que se llamarán antes de enviar el correo.

config.action_mailer.interceptors = ["MailInterceptor"]

3.13.13 config.action_mailer.preview_interceptors

Registra interceptores que se llamarán antes de previsualizar el correo.

config.action_mailer.preview_interceptors = ["MyPreviewMailInterceptor"]

3.13.14 config.action_mailer.preview_paths

Especifica las ubicaciones de las vistas previas del correo. Agregar rutas a esta opción de configuración hará que esas rutas se utilicen en la búsqueda de vistas previas del correo.

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

3.13.15 config.action_mailer.show_previews

Habilitar o deshabilitar vistas previas del correo. Por defecto, esto es true en desarrollo.

config.action_mailer.show_previews = false

3.13.16 config.action_mailer.perform_caching

Especifica si las plantillas del correo deben realizar caché de fragmentos o no. Si no se especifica, el valor predeterminado será true.

3.13.17 config.action_mailer.deliver_later_queue_name

Especifica la cola de Active Job a utilizar para el trabajo de entrega predeterminado (ver config.action_mailer.delivery_job). Cuando esta opción se establece en nil, los trabajos de entrega se envían a la cola predeterminada de Active Job (ver config.active_job.default_queue_name) .

Las clases de correo pueden anular esto para usar una cola diferente. Tenga en cuenta que esto solo se aplica cuando se utiliza el trabajo de entrega predeterminado. Si su correo está utilizando un trabajo personalizado, se utilizará su cola.

Asegúrese de que su adaptador de Active Job también esté configurado para procesar la cola especificada, de lo contrario, los trabajos de entrega pueden ser ignorados silenciosamente.

El valor predeterminado depende de la versión objetivo de config.load_defaults:

Comenzando con la versión El valor predeterminado es
(original) :mailers
6.1 nil

3.13.18 config.action_mailer.delivery_job

Especifica el trabajo de entrega para el correo.

El valor predeterminado depende de la versión objetivo de config.load_defaults:

Comenzando con la versión El valor predeterminado es
(original) ActionMailer::MailDeliveryJob
6.0 "ActionMailer::MailDeliveryJob"

3.14 Configuración de Active Support

Hay algunas opciones de configuración disponibles en Active Support:

3.14.1 config.active_support.bare

Habilita o deshabilita la carga de active_support/all al iniciar Rails. Por defecto es nil, lo que significa que se carga active_support/all.

3.14.2 config.active_support.test_order

Establece el orden en que se ejecutan los casos de prueba. Los valores posibles son :random y :sorted. Por defecto es :random.

3.14.3 config.active_support.escape_html_entities_in_json

Habilita o deshabilita el escape de entidades HTML en la serialización JSON. Por defecto es true.

3.14.4 config.active_support.use_standard_json_time_format

Habilita o deshabilita la serialización de fechas en formato ISO 8601. Por defecto es true.

3.14.5 config.active_support.time_precision

Establece la precisión de los valores de tiempo codificados en JSON. Por defecto es 3.

3.14.6 config.active_support.hash_digest_class

Permite configurar la clase de digest a utilizar para generar digests no sensibles, como el encabezado ETag.

El valor predeterminado depende de la versión objetivo de config.load_defaults:

Comenzando con la versión El valor predeterminado es
(original) OpenSSL::Digest::MD5
5.2 OpenSSL::Digest::SHA1
7.0 OpenSSL::Digest::SHA256

3.14.7 config.active_support.key_generator_hash_digest_class

Permite configurar la clase de digest a utilizar para derivar secretos de la base secreta configurada, como para cookies encriptadas.

El valor predeterminado depende de la versión objetivo de config.load_defaults:

Comenzando con la versión El valor predeterminado es
(original) OpenSSL::Digest::SHA1
7.0 OpenSSL::Digest::SHA256

3.14.8 config.active_support.use_authenticated_message_encryption

Especifica si se debe utilizar la encriptación autenticada AES-256-GCM como el cifrado predeterminado para encriptar mensajes en lugar de AES-256-CBC.

El valor predeterminado depende de la versión objetivo de config.load_defaults:

Comenzando con la versión El valor predeterminado es
(original) false
5.2 true

3.14.9 config.active_support.message_serializer

Especifica el serializador predeterminado utilizado por las instancias de ActiveSupport::MessageEncryptor y ActiveSupport::MessageVerifier. Para facilitar la migración entre serializadores, los serializadores proporcionados incluyen un mecanismo de respaldo para admitir múltiples formatos de deserialización:

Serializador Serializar y deserializar Respaldo de deserialización
: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

ADVERTENCIA: Marshal es un posible vector para ataques de deserialización en casos donde se ha filtrado un secreto de firma de mensajes. Si es posible, elija un serializador que no admita Marshal.

Los serializadores :message_pack y :message_pack_allow_marshal admiten el redondeo de algunos tipos de Ruby que no son compatibles con JSON, como Symbol. También pueden proporcionar un mejor rendimiento y tamaños de carga útiles más pequeños. Sin embargo, requieren el gem msgpack.

Cada uno de los serializadores anteriores emitirá una notificación de evento message_serializer_fallback.active_support cuando recurran a un formato de deserialización alternativo, lo que le permitirá rastrear con qué frecuencia ocurren dichos respaldos.

Alternativamente, puede especificar cualquier objeto de serializador que responda a los métodos dump y load. Por ejemplo:

config.active_support.message_serializer = YAML

El valor predeterminado depende de la versión objetivo de config.load_defaults:

Comenzando con la versión El valor predeterminado es
(original) :marshal
7.1 :json_allow_marshal

3.14.10 config.active_support.use_message_serializer_for_metadata

Cuando es true, habilita una optimización de rendimiento que serializa los datos del mensaje y los metadatos juntos. Esto cambia el formato del mensaje, por lo que los mensajes serializados de esta manera no pueden ser leídos por versiones anteriores (< 7.1) de Rails. Sin embargo, los mensajes que utilizan el formato antiguo aún se pueden leer, independientemente de si esta optimización está habilitada.

El valor predeterminado depende de la versión objetivo de config.load_defaults:

Comenzando con la versión El valor predeterminado es
(original) false
7.1 true

3.14.11 config.active_support.cache_format_version

Especifica qué formato de serialización utilizar para la caché. Los valores posibles son 7.0 y 7.1.

7.0 serializa las entradas de caché de manera más eficiente.

7.1 mejora aún más la eficiencia y permite detectar entradas de caché caducadas y con versiones no coincidentes sin deserializar sus valores. También incluye una optimización para valores de cadena simples, como fragmentos de vista.

Todos los formatos son compatibles hacia atrás y hacia adelante, lo que significa que las entradas de caché escritas en un formato pueden ser leídas al usar otro formato. Este comportamiento facilita la migración entre formatos sin invalidar toda la caché.

El valor predeterminado depende de la versión objetivo de config.load_defaults:

Comenzando con la versión El valor predeterminado es
7.0 7.0
7.1 7.1

3.14.12 config.active_support.deprecation

Configura el comportamiento de las advertencias de desaprobación. Consulte Deprecation::Behavior para una descripción de las opciones disponibles.

En los archivos generados por defecto config/environments, esto se establece en :log para desarrollo y :stderr para prueba, y se omite para producción en favor de config.active_support.report_deprecations.

3.14.13 config.active_support.disallowed_deprecation

Configura el comportamiento de las advertencias de desaprobación no permitidas. Consulte Deprecation::Behavior para una descripción de las opciones disponibles.

En los archivos generados por defecto config/environments, esto se establece en :raise tanto para desarrollo como para prueba, y se omite para producción en favor de config.active_support.report_deprecations.

3.14.14 config.active_support.disallowed_deprecation_warnings

Configura las advertencias de desaprobación que la Aplicación considera no permitidas. Esto permite, por ejemplo, tratar desaprobaciones específicas como fallos graves.

3.14.15 config.active_support.report_deprecations

Cuando es false, desactiva todas las advertencias de desaprobación, incluidas las desaprobaciones no permitidas, de los desaprobadores de la aplicación. Esto incluye todas las desaprobaciones de Rails y otros gems que pueden agregar su desaprobador a la colección de desaprobadores, pero puede que no evite todas las advertencias de desaprobación emitidas por ActiveSupport::Deprecation.

En los archivos generados por defecto config/environments, esto se establece en false para producción.

3.14.16 config.active_support.isolation_level

Configura la localización de la mayoría del estado interno de Rails. Si utiliza un servidor basado en fibras o un procesador de trabajos (por ejemplo, falcon), debe establecerlo en :fiber. De lo contrario, es mejor usar la localización :thread. Por defecto es :thread.

3.14.17 config.active_support.executor_around_test_case

Configura la suite de pruebas para llamar a Rails.application.executor.wrap alrededor de los casos de prueba. Esto hace que los casos de prueba se comporten más cerca de una solicitud o trabajo real. Varias características que normalmente están deshabilitadas en pruebas, como la caché de consultas de Active Record y las consultas asincrónicas, se habilitarán.

El valor predeterminado depende de la versión objetivo de config.load_defaults:

Comenzando con la versión El valor predeterminado es
(original) false
7.0 true

3.14.18 ActiveSupport::Logger.silencer

Se establece en false para deshabilitar la capacidad de silenciar el registro en un bloque. El valor predeterminado es true.

3.14.19 ActiveSupport::Cache::Store.logger

Especifica el registrador a utilizar dentro de las operaciones de almacenamiento en caché.

3.14.20 ActiveSupport.to_time_preserves_timezone

Especifica si los métodos to_time preservan el desplazamiento UTC de sus receptores. Si es false, los métodos to_time convertirán al desplazamiento UTC del sistema local en su lugar.

El valor predeterminado depende de la versión objetivo de config.load_defaults:

Comenzando con la versión El valor predeterminado es
(original) false
5.0 true

3.14.21 ActiveSupport.utc_to_local_returns_utc_offset_times

Configura ActiveSupport::TimeZone.utc_to_local para devolver un tiempo con un desplazamiento UTC en lugar de un tiempo UTC que incorpore ese desplazamiento.

El valor predeterminado depende de la versión objetivo de config.load_defaults:

Comenzando con la versión El valor predeterminado es
(original) false
6.1 true

3.14.22 config.active_support.raise_on_invalid_cache_expiration_time

Especifica si se debe elevar un ArgumentError si Rails.cache fetch o write reciben un tiempo de expires_at o expires_in inválido.

Las opciones son true y false. Si es false, la excepción se informará como handled y se registrará en su lugar.

El valor predeterminado depende de la versión objetivo de config.load_defaults:

Comenzando con la versión El valor predeterminado es
(original) false
7.1 true

3.15 Configuración de Active Job

config.active_job proporciona las siguientes opciones de configuración:

3.15.1 config.active_job.queue_adapter

Establece el adaptador para el backend de cola. El adaptador predeterminado es :async. Para obtener una lista actualizada de adaptadores integrados, consulte la documentación de la API de ActiveJob::QueueAdapters.

# Asegúrese de tener el gem del adaptador en su Gemfile
# y siga las instrucciones de instalación
# y despliegue específicas del adaptador.
config.active_job.queue_adapter = :sidekiq

3.15.2 config.active_job.default_queue_name

Se puede utilizar para cambiar el nombre de la cola predeterminada. Por defecto, esto es "default".

config.active_job.default_queue_name = :medium_priority

3.15.3 config.active_job.queue_name_prefix

Le permite establecer un prefijo opcional y no vacío para los nombres de cola de todos los trabajos. Por defecto, está en blanco y no se utiliza.

La siguiente configuración colocaría el trabajo dado en la cola production_high_priority cuando se ejecute en producción:

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

3.15.4 config.active_job.queue_name_delimiter

Tiene un valor predeterminado de '_'. Si se establece queue_name_prefix, entonces queue_name_delimiter une el prefijo y el nombre de cola no prefijado.

La siguiente configuración colocaría el trabajo proporcionado en la cola video_server.low_priority:

# el prefijo debe establecerse para que se use el delimitador
config.active_job.queue_name_prefix = 'video_server'
config.active_job.queue_name_delimiter = '.'
class EncoderJob < ActiveJob::Base
  queue_as :low_priority
  #....
end

3.15.5 config.active_job.enqueue_after_transaction_commit

Controla si los métodos #perform_later y similares de Active Job difieren automáticamente la cola del trabajo hasta después de que se confirme la transacción de Active Record actual.

Se puede establecer en:

  • :never - Nunca diferir la cola.
  • :always - Siempre diferir la cola.
  • :default - Dejar que el adaptador de cola defina el comportamiento.

Los backends de Active Job que utilizan la misma base de datos que Active Record como cola, generalmente deben evitar el diferimiento, y otros deben permitirlo.

Ejemplo:

Topic.transaction do
  topic = Topic.create(title: "New Topic")
  NewTopicNotificationJob.perform_later(topic)
end

En este ejemplo, si la configuración se establece en :never, el trabajo se colocará en cola inmediatamente, incluso si el Topic aún no se ha confirmado. Debido a esto, si el trabajo se recoge casi de inmediato, o si la transacción no tiene éxito por alguna razón, el trabajo no encontrará este tema en la base de datos.

Si se establece en :always, el trabajo se colocará realmente en cola después de que la transacción se haya confirmado. Si la transacción se revierte, el trabajo no se colocará en cola en absoluto.

Esta configuración también se puede establecer por clase de trabajo:

class SomeJob < ApplicationJob
  self.enqueue_after_transaction_commit = :never
end
Comenzando con la versión El valor predeterminado es
(original) :never
7.2 :default

3.15.6 config.active_job.logger

Acepta un registrador que cumpla con la interfaz de Log4r o la clase predeterminada de Logger de Ruby, que luego se utiliza para registrar información de Active Job. Puede recuperar este registrador llamando a logger en una clase o instancia de Active Job. Establezca en nil para deshabilitar el registro.

3.15.7 config.active_job.custom_serializers

Permite establecer serializadores de argumentos personalizados. Por defecto es [].

3.15.8 config.active_job.log_arguments

Controla si se registran los argumentos de un trabajo. Por defecto es true.

3.15.9 config.active_job.verbose_enqueue_logs

Especifica si las ubicaciones de origen de los métodos que colocan trabajos en segundo plano en cola deben registrarse debajo de las líneas de registro de cola relevantes. Por defecto, la bandera es true en desarrollo y false en todos los demás entornos.

3.15.10 config.active_job.retry_jitter

Controla la cantidad de "jitter" (variación aleatoria) aplicada al tiempo de espera calculado al reintentar trabajos fallidos.

El valor predeterminado depende de la versión objetivo de config.load_defaults:

Comenzando con la versión El valor predeterminado es
(original) 0.0
6.1 0.15

3.15.11 config.active_job.log_query_tags_around_perform

Determina si el contexto de trabajo para las etiquetas de consulta se actualizará automáticamente a través de un around_perform. El valor predeterminado es true.

3.16 Configuración de Action Cable

3.16.1 config.action_cable.url

Acepta una cadena para la URL donde está alojando su servidor de Action Cable. Utilizaría esta opción si está ejecutando servidores de Action Cable que están separados de su aplicación principal.

3.16.2 config.action_cable.mount_path

Acepta una cadena para donde montar Action Cable, como parte del proceso del servidor principal. Por defecto es /cable. Puede establecer esto como nil para no montar Action Cable como parte de su servidor Rails normal.

Puede encontrar opciones de configuración más detalladas en el Resumen de Action Cable.

3.16.3 config.action_cable.precompile_assets

Determina si los activos de Action Cable deben agregarse a la precompilación del pipeline de activos. No tiene efecto si no se utiliza Sprockets. El valor predeterminado es true.

3.17 Configuración de Active Storage

config.active_storage proporciona las siguientes opciones de configuración:

3.17.1 config.active_storage.variant_processor

Acepta un símbolo :mini_magick o :vips, especificando si las transformaciones de variantes y el análisis de blobs se realizarán con MiniMagick o ruby-vips.

El valor predeterminado depende de la versión objetivo de config.load_defaults:

Comenzando con la versión El valor predeterminado es
(original) :mini_magick
7.0 :vips

3.17.2 config.active_storage.analyzers

Acepta una matriz de clases que indica los analizadores disponibles para los blobs de Active Storage. Por defecto, esto está definido como:

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

Los analizadores de imágenes pueden extraer el ancho y la altura de un blob de imagen; el analizador de video puede extraer el ancho, la altura, la duración, el ángulo, la relación de aspecto y la presencia/ausencia de canales de video/audio de un blob de video; el analizador de audio puede extraer la duración y la tasa de bits de un blob de audio.

3.17.3 config.active_storage.previewers

Acepta una matriz de clases que indica los previsualizadores de imágenes disponibles en los blobs de Active Storage. Por defecto, esto está definido como:

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

PopplerPDFPreviewer y MuPDFPreviewer pueden generar una miniatura de la primera página de un blob PDF; VideoPreviewer del cuadro relevante de un blob de video.

3.17.4 config.active_storage.paths

Acepta un hash de opciones que indica las ubicaciones de los comandos del previsualizador/analizador. El valor predeterminado es {}, lo que significa que los comandos se buscarán en la ruta predeterminada. Puede incluir cualquiera de estas opciones:

  • :ffprobe - La ubicación del ejecutable ffprobe.
  • :mutool - La ubicación del ejecutable mutool.
  • :ffmpeg - La ubicación del ejecutable ffmpeg.
config.active_storage.paths[:ffprobe] = '/usr/local/bin/ffprobe'

3.17.5 config.active_storage.variable_content_types

Acepta una matriz de cadenas que indica los tipos de contenido que Active Storage puede transformar a través del procesador de variantes. Por defecto, esto está definido como:

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.17.6 config.active_storage.web_image_content_types

Acepta una matriz de cadenas consideradas como tipos de contenido de imágenes web en las que las variantes pueden procesarse sin convertirse al formato PNG de respaldo. Por ejemplo, si desea utilizar variantes AVIF en su aplicación, puede agregar image/avif a esta matriz.

El valor predeterminado depende de la versión objetivo de config.load_defaults:

Comenzando con la versión El valor predeterminado es
(original) %w(image/png image/jpeg image/gif)
7.2 %w(image/png image/jpeg image/gif image/webp)

3.17.7 config.active_storage.content_types_to_serve_as_binary

Acepta una matriz de cadenas que indica los tipos de contenido que Active Storage siempre servirá como un archivo adjunto, en lugar de en línea. Por defecto, esto está definido como:

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.17.8 config.active_storage.content_types_allowed_inline

Acepta una matriz de cadenas que indica los tipos de contenido que Active Storage permite servir en línea. Por defecto, esto está definido como:

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

3.17.9 config.active_storage.queues.analysis

Acepta un símbolo que indica la cola de Active Job a usar para trabajos de análisis. Cuando esta opción es nil, los trabajos de análisis se envían a la cola predeterminada de Active Job (ver config.active_job.default_queue_name).

El valor predeterminado depende de la versión objetivo de config.load_defaults:

A partir de la versión El valor predeterminado es
6.0 :active_storage_analysis
6.1 nil

3.17.10 config.active_storage.queues.mirror

Acepta un símbolo que indica la cola de Active Job a usar para trabajos de duplicación de carga directa. Cuando esta opción es nil, los trabajos de duplicación se envían a la cola predeterminada de Active Job (ver config.active_job.default_queue_name). El valor predeterminado es nil.

3.17.11 config.active_storage.queues.preview_image

Acepta un símbolo que indica la cola de Active Job a usar para la preprocesamiento de vistas previas de imágenes. Cuando esta opción es nil, los trabajos se envían a la cola predeterminada de Active Job (ver config.active_job.default_queue_name). El valor predeterminado es nil.

3.17.12 config.active_storage.queues.purge

Acepta un símbolo que indica la cola de Active Job a usar para trabajos de purga. Cuando esta opción es nil, los trabajos de purga se envían a la cola predeterminada de Active Job (ver config.active_job.default_queue_name).

El valor predeterminado depende de la versión objetivo de config.load_defaults:

A partir de la versión El valor predeterminado es
6.0 :active_storage_purge
6.1 nil

3.17.13 config.active_storage.queues.transform

Acepta un símbolo que indica la cola de Active Job a usar para la preprocesamiento de variantes. Cuando esta opción es nil, los trabajos se envían a la cola predeterminada de Active Job (ver config.active_job.default_queue_name). El valor predeterminado es nil.

3.17.14 config.active_storage.logger

Puede usarse para establecer el logger utilizado por Active Storage. Acepta un logger que cumpla con la interfaz de Log4r o la clase predeterminada Ruby Logger.

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

3.17.15 config.active_storage.service_urls_expire_in

Determina el vencimiento predeterminado de las URLs generadas por:

El valor predeterminado es 5 minutos.

3.17.16 config.active_storage.urls_expire_in

Determina el vencimiento predeterminado de las URLs en la aplicación Rails generadas por Active Storage. El valor predeterminado es nil.

3.17.17 config.active_storage.touch_attachment_records

Indica a ActiveStorage::Attachments que toque su registro correspondiente cuando se actualice. El valor predeterminado es verdadero.

3.17.18 config.active_storage.routes_prefix

Puede usarse para establecer el prefijo de ruta para las rutas servidas por Active Storage. Acepta una cadena que se antepondrá a las rutas generadas.

config.active_storage.routes_prefix = '/files'

El valor predeterminado es /rails/active_storage.

3.17.19 config.active_storage.track_variants

Determina si las variantes se registran en la base de datos.

El valor predeterminado depende de la versión objetivo de config.load_defaults:

A partir de la versión El valor predeterminado es
(original) false
6.1 true

3.17.20 config.active_storage.draw_routes

Puede usarse para alternar la generación de rutas de Active Storage. El valor predeterminado es true.

3.17.21 config.active_storage.resolve_model_to_route

Puede usarse para cambiar globalmente cómo se entregan los archivos de Active Storage.

Valores permitidos son:

  • :rails_storage_redirect: Redirigir a URLs de servicio firmadas y de corta duración.
  • :rails_storage_proxy: Proxiar archivos descargándolos.

El valor predeterminado es :rails_storage_redirect.

3.17.22 config.active_storage.video_preview_arguments

Puede usarse para alterar la forma en que ffmpeg genera imágenes de vista previa de video.

El valor predeterminado depende de la versión objetivo de config.load_defaults:

A partir de la versión El valor predeterminado es
(original) "-y -vframes 1 -f image2"
7.0 "-vf 'select=eq(n\\,0)+eq(key\\,1)+gt(scene\\,0.015)"1
+ ",loop=loop=-1:size=2,trim=start_frame=1'"2
+ " -frames:v 1 -f image2"

  1. Seleccione el primer fotograma de video, más fotogramas clave, más fotogramas que cumplan con el umbral de cambio de escena.
  2. Use el primer fotograma de video como respaldo cuando no haya otros fotogramas que cumplan los criterios al repetir el primer (uno o) dos fotogramas seleccionados, luego eliminando el primer fotograma repetido.

3.17.23 config.active_storage.multiple_file_field_include_hidden

En Rails 7.1 y más allá, las relaciones has_many_attached de Active Storage por defecto reemplazarán la colección actual en lugar de agregar a ella. Por lo tanto, para admitir la presentación de una colección vacía, cuando multiple_file_field_include_hidden es true, el file_field helper renderizará un campo oculto auxiliar, similar al campo auxiliar renderizado por el check_box helper.

El valor predeterminado depende de la versión objetivo de config.load_defaults:

A partir de la versión El valor predeterminado es
(original) false
7.0 true

3.17.24 config.active_storage.precompile_assets

Determina si los activos de Active Storage deben agregarse a la precompilación del pipeline de activos. No tiene efecto si no se utiliza Sprockets. El valor predeterminado es true.

3.18 Configuración de Action Text

3.18.1 config.action_text.attachment_tag_name

Acepta una cadena para la etiqueta HTML utilizada para envolver los archivos adjuntos. El valor predeterminado es "action-text-attachment".

3.18.2 config.action_text.sanitizer_vendor

Configura el sanitizador HTML utilizado por Action Text configurando ActionText::ContentHelper.sanitizer a una instancia de la clase devuelta por el método .safe_list_sanitizer del proveedor. El valor predeterminado depende de la versión objetivo de config.load_defaults:

A partir de la versión El valor predeterminado es Que analiza el marcado como
(original) Rails::HTML4::Sanitizer HTML4
7.1 Rails::HTML5::Sanitizer (ver NOTA) HTML5

NOTA: Rails::HTML5::Sanitizer no es compatible con JRuby, por lo que en plataformas JRuby Rails volverá a Rails::HTML4::Sanitizer.

3.19 Configuración de una Base de Datos

Casi todas las aplicaciones Rails interactuarán con una base de datos. Puede conectarse a la base de datos configurando una variable de entorno ENV['DATABASE_URL'] o usando un archivo de configuración llamado config/database.yml.

Usando el archivo config/database.yml puede especificar toda la información necesaria para acceder a su base de datos:

development:
  adapter: postgresql
  database: blog_development
  pool: 5

Esto se conectará a la base de datos llamada blog_development usando el adaptador postgresql. Esta misma información puede almacenarse en una URL y proporcionarse a través de una variable de entorno de esta manera:

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

El archivo config/database.yml contiene secciones para tres entornos diferentes en los que Rails puede ejecutarse por defecto:

  • El entorno development se utiliza en su computadora de desarrollo/local mientras interactúa manualmente con la aplicación.
  • El entorno test se utiliza al ejecutar pruebas automatizadas.
  • El entorno production se utiliza cuando despliega su aplicación para que el mundo la use.

Si lo desea, puede especificar manualmente una URL dentro de su config/database.yml

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

El archivo config/database.yml puede contener etiquetas ERB <%= %>. Cualquier cosa dentro de las etiquetas se evaluará como código Ruby. Puede usar esto para extraer datos de una variable de entorno o para realizar cálculos para generar la información de conexión necesaria.

Cuando se usa un ENV['DATABASE_URL'] o una clave url en su archivo config/database.yml, Rails permite mapear el protocolo en la URL a un adaptador de base de datos que puede configurarse desde dentro de la aplicación. Esto permite que el adaptador se configure sin modificar la URL establecida en el entorno de despliegue. Ver: config.active_record.protocol_adapters.

CONSEJO: No tiene que actualizar manualmente las configuraciones de la base de datos. Si observa las opciones del generador de aplicaciones, verá que una de las opciones se llama --database. Esta opción le permite elegir un adaptador de una lista de las bases de datos relacionales más utilizadas. Incluso puede ejecutar el generador repetidamente: cd .. && rails new blog --database=mysql. Cuando confirme la sobrescritura del archivo config/database.yml, su aplicación se configurará para MySQL en lugar de SQLite. A continuación se muestran ejemplos detallados de las conexiones de bases de datos comunes.

3.20 Preferencia de Conexión

Dado que hay dos formas de configurar su conexión (usando config/database.yml o usando una variable de entorno), es importante entender cómo pueden interactuar.

Si tiene un archivo config/database.yml vacío pero su ENV['DATABASE_URL'] está presente, entonces Rails se conectará a la base de datos a través de su variable de entorno:

$ cat config/database.yml

$ echo $DATABASE_URL
postgresql://localhost/my_database

Si tiene un config/database.yml pero no ENV['DATABASE_URL'], entonces este archivo se usará para conectarse a su base de datos:

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

$ echo $DATABASE_URL

Si tiene tanto config/database.yml como ENV['DATABASE_URL'] configurados, entonces Rails combinará la configuración. Para entender mejor esto, debemos ver algunos ejemplos.

Cuando se proporciona información de conexión duplicada, la variable de entorno tendrá prioridad:

$ 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.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">
  ]

Aquí, el adaptador, el host y la base de datos coinciden con la información en ENV['DATABASE_URL'].

Si se proporciona información no duplicada, obtendrá todos los valores únicos, la variable de entorno todavía tiene prioridad en casos de conflictos.

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

$ echo $DATABASE_URL
postgresql://localhost/my_database

$ 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">
  ]

Dado que pool no está en la información de conexión proporcionada por ENV['DATABASE_URL'], su información se fusiona. Dado que adapter es duplicado, la información de conexión de ENV['DATABASE_URL'] gana.

La única forma de no usar explícitamente la información de conexión en ENV['DATABASE_URL'] es especificar una conexión URL explícita usando la subclave "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.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">
  ]

Aquí, la información de conexión en ENV['DATABASE_URL'] se ignora, observe el diferente adaptador y nombre de la base de datos.

Dado que es posible incrustar ERB en su config/database.yml, es mejor práctica mostrar explícitamente que está utilizando ENV['DATABASE_URL'] para conectarse a su base de datos. Esto es especialmente útil en producción, ya que no debe comprometer secretos como su contraseña de base de datos en su control de versiones (como Git).

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

Ahora el comportamiento es claro, que solo estamos usando la información de conexión en ENV['DATABASE_URL'].

3.20.1 Configuración de una Base de Datos SQLite3

Rails viene con soporte incorporado para SQLite3, que es una aplicación de base de datos ligera sin servidor. Si bien un entorno de producción ocupado puede sobrecargar SQLite, funciona bien para el desarrollo y las pruebas. Rails por defecto utiliza una base de datos SQLite al crear un nuevo proyecto, pero siempre puede cambiarlo más tarde.

Aquí está la sección del archivo de configuración predeterminado (config/database.yml) con información de conexión para el entorno de desarrollo:

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

NOTA: Rails utiliza una base de datos SQLite3 para el almacenamiento de datos por defecto porque es una base de datos de configuración cero que simplemente funciona. Rails también admite MySQL (incluido MariaDB) y PostgreSQL "de serie", y tiene complementos para muchos sistemas de bases de datos. Si está utilizando una base de datos en un entorno de producción, es muy probable que Rails tenga un adaptador para ella.

3.20.2 Configuración de una Base de Datos MySQL o MariaDB

Si elige usar MySQL o MariaDB en lugar de la base de datos SQLite3 proporcionada, su config/database.yml se verá un poco diferente. Aquí está la sección de desarrollo:

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

Si su base de datos de desarrollo tiene un usuario root con una contraseña vacía, esta configuración debería funcionar para usted. De lo contrario, cambie el nombre de usuario y la contraseña en la sección development según corresponda.

NOTA: Si su versión de MySQL es 5.5 o 5.6 y desea usar el conjunto de caracteres utf8mb4 por defecto, configure su servidor MySQL para admitir el prefijo de clave más largo habilitando la variable de sistema innodb_large_prefix.

Las Bloqueos Asesoras están habilitadas por defecto en MySQL y se utilizan para hacer que las migraciones de bases de datos sean seguras de manera concurrente. Puede deshabilitar las bloqueos asesoras configurando advisory_locks en false:

production:
  adapter: mysql2
  advisory_locks: false

3.20.3 Configuración de una Base de Datos PostgreSQL

Si elige usar PostgreSQL, su config/database.yml se personalizará para usar bases de datos PostgreSQL:

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

Por defecto, Active Record utiliza características de base de datos como declaraciones preparadas y bloqueos asesoras. Es posible que deba deshabilitar esas características si está utilizando un agrupador de conexiones externo como PgBouncer:

production:
  adapter: postgresql
  prepared_statements: false
  advisory_locks: false

Si está habilitado, Active Record creará hasta 1000 declaraciones preparadas por conexión de base de datos por defecto. Para modificar este comportamiento, puede establecer statement_limit en un valor diferente:

production:
  adapter: postgresql
  statement_limit: 200

Cuantas más declaraciones preparadas se utilicen, más memoria requerirá su base de datos. Si su base de datos PostgreSQL está alcanzando límites de memoria, intente reducir statement_limit o deshabilitar las declaraciones preparadas.

3.20.4 Configuración de una Base de Datos SQLite3 para la Plataforma JRuby

Si elige usar SQLite3 y está utilizando JRuby, su config/database.yml se verá un poco diferente. Aquí está la sección de desarrollo:

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

3.20.5 Configuración de una Base de Datos MySQL o MariaDB para la Plataforma JRuby

Si elige usar MySQL o MariaDB y está utilizando JRuby, su config/database.yml se verá un poco diferente. Aquí está la sección de desarrollo:

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

3.20.6 Configuración de una Base de Datos PostgreSQL para la Plataforma JRuby

Si elige usar PostgreSQL y está utilizando JRuby, su config/database.yml se verá un poco diferente. Aquí está la sección de desarrollo:

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

Cambie el nombre de usuario y la contraseña en la sección development según corresponda.

3.20.7 Configuración del Almacenamiento de Metadatos

Por defecto, Rails almacenará información sobre su entorno Rails y esquema en una tabla interna llamada ar_internal_metadata.

Para desactivar esto por conexión, configure use_metadata_table en su configuración de base de datos. Esto es útil cuando se trabaja con una base de datos compartida y/o un usuario de base de datos que no puede crear tablas.

development:
  adapter: postgresql
  use_metadata_table: false

3.20.8 Configuración del Comportamiento de Reintentos

Por defecto, Rails se volverá a conectar automáticamente al servidor de base de datos y reintentará ciertas consultas si algo sale mal. Solo se reintentarán las consultas que se puedan volver a intentar de manera segura (idempotentes). El número de reintentos se puede especificar en su configuración de base de datos a través de connection_retries, o deshabilitarse estableciendo el valor en 0. El número predeterminado de reintentos es 1.

development:
  adapter: mysql2
  connection_retries: 3

La configuración de la base de datos también permite configurar un retry_deadline. Si se configura un retry_deadline, una consulta que de otro modo sería reintentar no se reintentará si ha transcurrido el tiempo especificado mientras se intentaba por primera vez. Por ejemplo, un retry_deadline de 5 segundos significa que si han pasado 5 segundos desde que se intentó por primera vez una consulta, no se reintentará la consulta, incluso si es idempotente y quedan connection_retries.

Este valor por defecto es nil, lo que significa que todas las consultas reintentables se reintentan independientemente del tiempo transcurrido. El valor de esta configuración debe especificarse en segundos.

development:
  adapter: mysql2
  retry_deadline: 5 # Dejar de reintentar consultas después de 5 segundos

3.20.9 Configuración de la Caché de Consultas

Por defecto, Rails almacena automáticamente en caché los conjuntos de resultados devueltos por las consultas. Si Rails encuentra la misma consulta nuevamente para esa solicitud o trabajo, utilizará el conjunto de resultados en caché en lugar de ejecutar la consulta contra la base de datos nuevamente.

La caché de consultas se almacena en memoria, y para evitar usar demasiada memoria, automáticamente elimina las consultas menos utilizadas recientemente al alcanzar un umbral. Por defecto, el umbral es 100, pero puede configurarse en el database.yml.

development:
  adapter: mysql2
  query_cache: 200

Para desactivar completamente la caché de consultas, se puede establecer en false

development:
  adapter: mysql2
  query_cache: false

3.21 Creación de Entornos Rails

Por defecto, Rails viene con tres entornos: "development", "test" y "production". Aunque estos son suficientes para la mayoría de los casos de uso, hay circunstancias en las que se desean más entornos.

Imagine que tiene un servidor que refleja el entorno de producción pero que solo se utiliza para pruebas. Dicho servidor se llama comúnmente "servidor de staging". Para definir un entorno llamado "staging" para este servidor, simplemente cree un archivo llamado config/environments/staging.rb. Dado que este es un entorno similar a producción, podría copiar el contenido de config/environments/production.rb como punto de partida y realizar los cambios necesarios a partir de ahí. También es posible requerir y extender otras configuraciones de entorno de esta manera:

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

Rails.application.configure do
  # Anulaciones de staging
end

Ese entorno no es diferente a los predeterminados, inicie un servidor con bin/rails server -e staging, una consola con bin/rails console -e staging, Rails.env.staging? funciona, etc.

3.22 Despliegue en un Subdirectorio (raíz de URL relativa)

Por defecto, Rails espera que su aplicación se ejecute en la raíz (por ejemplo, /). Esta sección explica cómo ejecutar su aplicación dentro de un directorio.

Supongamos que queremos desplegar nuestra aplicación en "/app1". Rails necesita conocer este directorio para generar las rutas apropiadas:

config.relative_url_root = "/app1"

alternativamente, puede configurar la variable de entorno RAILS_RELATIVE_URL_ROOT.

Rails ahora antepondrá "/app1" al generar enlaces.

3.22.1 Usando Passenger

Passenger facilita la ejecución de su aplicación en un subdirectorio. Puede encontrar la configuración relevante en el manual de Passenger.

3.22.2 Usando un Proxy Inverso

Desplegar su aplicación utilizando un proxy inverso tiene ventajas definitivas sobre los despliegues tradicionales. Le permiten tener más control sobre su servidor al superponer los componentes requeridos por su aplicación.

Muchos servidores web modernos pueden utilizarse como un servidor proxy para equilibrar elementos de terceros, como servidores de caché o servidores de aplicaciones.

Un servidor de aplicaciones que puede utilizar es Unicorn para ejecutarse detrás de un proxy inverso.

En este caso, necesitaría configurar el servidor proxy (NGINX, Apache, etc.) para aceptar conexiones desde su servidor de aplicaciones (Unicorn). Por defecto, Unicorn escuchará conexiones TCP en el puerto 8080, pero puede cambiar el puerto o configurarlo para usar sockets en su lugar.

Puede encontrar más información en el readme de Unicorn y entender la filosofía detrás de él.

Una vez que haya configurado el servidor de aplicaciones, debe enviar solicitudes a él configurando su servidor web adecuadamente. Por ejemplo, su configuración de NGINX puede incluir:

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;
  }

  # alguna otra configuración
}

Asegúrese de leer la documentación de NGINX para obtener la información más actualizada.

4 Configuraciones del Entorno Rails

Algunas partes de Rails también pueden configurarse externamente proporcionando variables de entorno. Las siguientes variables de entorno son reconocidas por varias partes de Rails:

  • ENV["RAILS_ENV"] define el entorno Rails (producción, desarrollo, prueba, etc.) en el que se ejecutará Rails.

  • ENV["RAILS_RELATIVE_URL_ROOT"] es utilizado por el código de enrutamiento para reconocer URLs cuando despliega su aplicación en un subdirectorio.

  • ENV["RAILS_CACHE_ID"] y ENV["RAILS_APP_VERSION"] se utilizan para generar claves de caché expandidas en el código de caché de Rails. Esto le permite tener múltiples cachés separadas de la misma aplicación.

5 Uso de Archivos de Inicialización

Después de cargar el framework y cualquier gema en su aplicación, Rails se encarga de cargar inicializadores. Un inicializador es cualquier archivo Ruby almacenado en config/initializers en su aplicación. Puede usar inicializadores para guardar configuraciones que deben realizarse después de que todos los frameworks y gemas estén cargados, como opciones para configurar configuraciones para estas partes.

Los archivos en config/initializers (y cualquier subdirectorio de config/initializers) se ordenan y cargan uno por uno como parte del inicializador load_config_initializers.

Si un inicializador tiene código que depende de código en otro inicializador, puede combinarlos en un solo inicializador en su lugar. Esto hace que las dependencias sean más explícitas y puede ayudar a revelar nuevos conceptos dentro de su aplicación. Rails también admite la numeración de nombres de archivo de inicializadores, pero esto puede llevar a cambios en los nombres de los archivos. Cargar explícitamente inicializadores con require no se recomienda, ya que causará que el inicializador se cargue dos veces.

NOTA: No hay garantía de que sus inicializadores se ejecuten después de todos los inicializadores de las gemas, por lo que cualquier código de inicialización que dependa de que una gema determinada haya sido inicializada debe ir en un bloque config.after_initialize.

6 Ganchos de Carga

El código de Rails a menudo puede ser referenciado al cargar una aplicación. Rails es responsable del orden de carga de estos frameworks, por lo que cuando carga frameworks, como ActiveRecord::Base, prematuramente está violando un contrato implícito que su aplicación tiene con Rails. Además, al cargar código como ActiveRecord::Base al inicio de su aplicación, está cargando frameworks enteros que pueden ralentizar el tiempo de inicio y podrían causar conflictos con el orden de carga y el inicio de su aplicación.

Los ganchos de carga y configuración son la API que le permite engancharse en este proceso de inicialización sin violar el contrato de carga con Rails. Esto también mitigará la degradación del rendimiento de inicio y evitará conflictos.

6.1 Evitar Cargar Frameworks de Rails

Dado que Ruby es un lenguaje dinámico, algún código hará que se carguen diferentes frameworks de Rails. Tome este fragmento, por ejemplo:

ActiveRecord::Base.include(MyActiveRecordHelper)

Este fragmento significa que cuando se carga este archivo, encontrará ActiveRecord::Base. Este encuentro hace que Ruby busque la definición de esa constante y la requiera. Esto hace que se cargue todo el framework de Active Record al inicio.

ActiveSupport.on_load es un mecanismo que se puede utilizar para diferir la carga de código hasta que realmente se necesite. El fragmento anterior puede cambiarse a:

ActiveSupport.on_load(:active_record) do
  include MyActiveRecordHelper
end

Este nuevo fragmento solo incluirá MyActiveRecordHelper cuando ActiveRecord::Base se cargue.

6.2 ¿Cuándo se llaman los Ganchos?

En el framework de Rails, estos ganchos se llaman cuando se carga una biblioteca específica. Por ejemplo, cuando se carga ActionController::Base, se llama al gancho :action_controller_base. Esto significa que todas las llamadas a ActiveSupport.on_load con ganchos :action_controller_base se llamarán en el contexto de ActionController::Base (eso significa que self será un ActionController::Base).

6.3 Modificar Código para Usar Ganchos de Carga

Modificar el código generalmente es sencillo. Si tiene una línea de código que se refiere a un framework de Rails como ActiveRecord::Base, puede envolver ese código en un gancho de carga.

Modificar llamadas a include

ActiveRecord::Base.include(MyActiveRecordHelper)

se convierte en

ActiveSupport.on_load(:active_record) do
  # self se refiere a ActiveRecord::Base aquí,
  # por lo que podemos llamar a .include
  include MyActiveRecordHelper
end

Modificar llamadas a prepend

ActionController::Base.prepend(MyActionControllerHelper)

se convierte en

ActiveSupport.on_load(:action_controller_base) do
  # self se refiere a ActionController::Base aquí,
  # por lo que podemos llamar a .prepend
  prepend MyActionControllerHelper
end

Modificar llamadas a métodos de clase

ActiveRecord::Base.include_root_in_json = true

se convierte en

ActiveSupport.on_load(:active_record) do
  # self se refiere a ActiveRecord::Base aquí
  self.include_root_in_json = true
end

6.4 Ganchos de Carga Disponibles

Estos son los ganchos de carga que puede usar en su propio código. Para engancharse en el proceso de inicialización de una de las siguientes clases, utilice el gancho disponible.

Clase Gancho
ActionCable action_cable
ActionCable::Channel::Base action_cable_channel
ActionCable::Connection::Base action_cable_connection
ActionCable::Connection::TestCase action_cable_connection_test_case
ActionController::API action_controller_api
ActionController::API action_controller
ActionController::Base action_controller_base
ActionController::Base action_controller
ActionController::TestCase action_controller_test_case
ActionDispatch::IntegrationTest action_dispatch_integration_test
ActionDispatch::Response action_dispatch_response
ActionDispatch::Request action_dispatch_request
ActionDispatch::SystemTestCase action_dispatch_system_test_case
ActionMailbox::Base action_mailbox
ActionMailbox::InboundEmail action_mailbox_inbound_email
ActionMailbox::Record action_mailbox_record
ActionMailbox::TestCase action_mailbox_test_case
ActionMailer::Base action_mailer
ActionMailer::TestCase action_mailer_test_case
ActionText::Content action_text_content
ActionText::Record action_text_record
ActionText::RichText action_text_rich_text
ActionText::EncryptedRichText action_text_encrypted_rich_text
ActionView::Base action_view
ActionView::TestCase action_view_test_case
ActiveJob::Base active_job
ActiveJob::TestCase active_job_test_case
ActiveModel::Model active_model
ActiveRecord::Base active_record
ActiveRecord::TestFixtures active_record_fixtures
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter active_record_postgresqladapter
ActiveRecord::ConnectionAdapters::Mysql2Adapter active_record_mysql2adapter
ActiveRecord::ConnectionAdapters::TrilogyAdapter active_record_trilogyadapter
ActiveRecord::ConnectionAdapters::SQLite3Adapter active_record_sqlite3adapter
ActiveStorage::Attachment active_storage_attachment
ActiveStorage::VariantRecord active_storage_variant_record
ActiveStorage::Blob active_storage_blob
ActiveStorage::Record active_storage_record
ActiveSupport::TestCase active_support_test_case
i18n i18n

7 Eventos de Inicialización

Rails tiene 5 eventos de inicialización a los que puede engancharse (enumerados en el orden en que se ejecutan):

  • before_configuration: Este se ejecuta cuando la clase de la aplicación hereda de Rails::Application en config/application.rb. Antes de que se ejecute el cuerpo de la clase. Los motores pueden usar este gancho para ejecutar código antes de que la propia aplicación se configure.

  • before_initialize: Este se ejecuta directamente antes del proceso de inicialización de la aplicación con el inicializador :bootstrap_hook cerca del comienzo del proceso de inicialización de Rails.

  • to_prepare: Se ejecuta después de que los inicializadores se ejecutan para todos los Railties (incluida la propia aplicación), pero antes de la carga ávida y de que se construya la pila de middleware. Más importante aún, se ejecutará en cada recarga de código en development, pero solo una vez (durante el inicio) en production y test.

  • before_eager_load: Este se ejecuta directamente antes de que ocurra la carga ávida, que es el comportamiento predeterminado para el entorno production y no para el entorno development.

  • after_initialize: Se ejecuta directamente después de la inicialización de la aplicación, después de que se ejecuten los inicializadores de la aplicación en config/initializers.

Para definir un evento para estos ganchos, use la sintaxis de bloque dentro de una subclase de Rails::Application, Rails::Railtie o Rails::Engine:

module YourApp
  class Application < Rails::Application
    config.before_initialize do
      # el código de inicialización va aquí
    end
  end
end

Alternativamente, también puede hacerlo a través del método config en el objeto Rails.application:

Rails.application.config.before_initialize do
  # el código de inicialización va aquí
end

ADVERTENCIA: Algunas partes de su aplicación, notablemente el enrutamiento, aún no están configuradas en el punto en que se llama al bloque after_initialize.

7.1 Rails::Railtie#initializer

Rails tiene varios inicializadores que se ejecutan al inicio y que todos se definen utilizando el método initializer de Rails::Railtie. Aquí hay un ejemplo del inicializador set_helpers_path de Action Controller:

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

El método initializer toma tres argumentos, siendo el primero el nombre del inicializador, el segundo un hash de opciones (no mostrado aquí) y el tercero un bloque. La clave :before en el hash de opciones puede especificarse para indicar qué inicializador debe ejecutarse antes de este nuevo inicializador, y la clave :after especificará qué inicializador ejecutar este inicializador después.

Los inicializadores definidos utilizando el método initializer se ejecutarán en el orden en que se definen, con la excepción de aquellos que utilizan los métodos :before o :after.

ADVERTENCIA: Puede colocar su inicializador antes o después de cualquier otro inicializador en la cadena, siempre y cuando sea lógico. Supongamos que tiene 4 inicializadores llamados "uno" a "cuatro" (definidos en ese orden) y define "cuatro" para que vaya antes de "dos" pero después de "tres", eso simplemente no es lógico y Rails no podrá determinar el orden de su inicializador.

El argumento de bloque del método initializer es la instancia de la propia aplicación, por lo que podemos acceder a la configuración en ella utilizando el método config, como se hace en el ejemplo.

Debido a que Rails::Application hereda de Rails::Railtie (indirectamente), puede usar el método initializer en config/application.rb para definir inicializadores para la aplicación.

7.2 Inicializadores

A continuación se muestra una lista completa de todos los inicializadores que se encuentran en Rails en el orden en que se definen (y por lo tanto se ejecutan, a menos que se indique lo contrario).

  • load_environment_hook: Sirve como marcador de posición para que :load_environment_config pueda definirse para ejecutarse antes de él.

  • load_active_support: Requiere active_support/dependencies, que configura la base para Active Support. Opcionalmente requiere active_support/all si config.active_support.bare no es verdadero, que es el valor predeterminado.

  • initialize_logger: Inicializa el logger (un objeto ActiveSupport::BroadcastLogger) para la aplicación y lo hace accesible en Rails.logger, siempre que ningún inicializador insertado antes de este punto haya definido Rails.logger.

  • initialize_cache: Si Rails.cache aún no está configurado, inicializa la caché haciendo referencia al valor en config.cache_store y almacena el resultado como Rails.cache. Si este objeto responde al método middleware, su middleware se inserta antes de Rack::Runtime en la pila de middleware.

  • set_clear_dependencies_hook: Este inicializador, que solo se ejecuta si config.enable_reloading está configurado en true, utiliza ActionDispatch::Callbacks.after para eliminar las constantes que han sido referenciadas durante la solicitud del espacio de objetos para que se vuelvan a cargar durante la siguiente solicitud.

  • bootstrap_hook: Ejecuta todos los bloques configurados before_initialize.

  • i18n.callbacks: En el entorno de desarrollo, configura un callback to_prepare que llamará a I18n.reload! si alguno de los locales ha cambiado desde la última solicitud. En producción, este callback solo se ejecutará en la primera solicitud.

  • active_support.deprecation_behavior: Configura el comportamiento de informe de deprecación para Rails.application.deprecators basado en config.active_support.report_deprecations, config.active_support.deprecation, config.active_support.disallowed_deprecation, y config.active_support.disallowed_deprecation_warnings.

  • active_support.initialize_time_zone: Establece la zona horaria predeterminada para la aplicación basada en la configuración config.time_zone, que por defecto es "UTC".

  • active_support.initialize_beginning_of_week: Establece el comienzo de semana predeterminado para la aplicación basada en la configuración config.beginning_of_week, que por defecto es :monday.

  • active_support.set_configs: Configura Active Support utilizando las configuraciones en config.active_support enviando los nombres de los métodos como configuradores a ActiveSupport y pasando los valores.

  • action_dispatch.configure: Configura ActionDispatch::Http::URL.tld_length para que se establezca en el valor de config.action_dispatch.tld_length.

  • action_view.set_configs: Configura Action View utilizando las configuraciones en config.action_view enviando los nombres de los métodos como configuradores a ActionView::Base y pasando los valores.

  • action_controller.assets_config: Inicializa config.action_controller.assets_dir al directorio público de la aplicación si no está configurado explícitamente.

  • action_controller.set_helpers_path: Establece helpers_path de Action Controller en el helpers_path de la aplicación.

  • action_controller.parameters_config: Configura las opciones de parámetros fuertes para ActionController::Parameters.

  • action_controller.set_configs: Configura Action Controller utilizando las configuraciones en config.action_controller enviando los nombres de los métodos como configuradores a ActionController::Base y pasando los valores.

  • action_controller.compile_config_methods: Inicializa métodos para las configuraciones especificadas para que sean más rápidas de acceder.

  • active_record.initialize_timezone: Establece ActiveRecord::Base.time_zone_aware_attributes en true, así como ActiveRecord::Base.default_timezone en UTC. Cuando se leen atributos de la base de datos, se convertirán en la zona horaria especificada por Time.zone.

  • active_record.logger: Establece ActiveRecord::Base.logger - si aún no está configurado - en Rails.logger.

  • active_record.migration_error: Configura middleware para verificar migraciones pendientes.

  • active_record.check_schema_cache_dump: Carga el volcado de la caché del esquema si está configurado y disponible.

  • active_record.warn_on_records_fetched_greater_than: Habilita advertencias cuando las consultas devuelven grandes cantidades de registros.

  • active_record.set_configs: Configura Active Record utilizando las configuraciones en config.active_record enviando los nombres de los métodos como configuradores a ActiveRecord::Base y pasando los valores.

  • active_record.initialize_database: Carga la configuración de la base de datos (por defecto) desde config/database.yml y establece una conexión para el entorno actual.

  • active_record.log_runtime: Incluye ActiveRecord::Railties::ControllerRuntime y ActiveRecord::Railties::JobRuntime, que son responsables de informar el tiempo tomado por las llamadas de Active Record para la solicitud al logger.

  • active_record.set_reloader_hooks: Restablece todas las conexiones recargables a la base de datos si config.enable_reloading está configurado en true.

  • active_record.add_watchable_files: Agrega archivos schema.rb y structure.sql a archivos que se pueden ver.

  • active_job.logger: Establece ActiveJob::Base.logger - si aún no está configurado - en Rails.logger.

  • active_job.set_configs: Configura Active Job utilizando las configuraciones en config.active_job enviando los nombres de los métodos como configuradores a ActiveJob::Base y pasando los valores.

  • action_mailer.logger: Establece ActionMailer::Base.logger - si aún no está configurado - en Rails.logger.

  • action_mailer.set_configs: Configura Action Mailer utilizando las configuraciones en config.action_mailer enviando los nombres de los métodos como configuradores a ActionMailer::Base y pasando los valores.

  • action_mailer.compile_config_methods: Inicializa métodos para las configuraciones especificadas para que sean más rápidas de acceder.

  • set_load_path: Este inicializador se ejecuta antes de bootstrap_hook. Agrega rutas especificadas por config.paths.load_paths a $LOAD_PATH. Y a menos que configure config.add_autoload_paths_to_load_path en false, también agregará todas las rutas de carga automática especificadas por config.autoload_paths, config.eager_load_paths, config.autoload_once_paths.

  • set_autoload_paths: Este inicializador se ejecuta antes de bootstrap_hook. Agrega todos los subdirectorios de app y rutas especificadas por config.autoload_paths, config.eager_load_paths y config.autoload_once_paths a ActiveSupport::Dependencies.autoload_paths.

  • add_routing_paths: Carga (por defecto) todos los archivos config/routes.rb (en la aplicación y railties, incluidos los motores) y configura las rutas para la aplicación.

  • add_locales: Agrega los archivos en config/locales (de la aplicación, railties y motores) a I18n.load_path, haciendo disponibles las traducciones en estos archivos.

  • add_view_paths: Agrega el directorio app/views de la aplicación, railties y motores a la ruta de búsqueda de archivos de vista para la aplicación.

  • add_mailer_preview_paths: Agrega el directorio test/mailers/previews de la aplicación, railties y motores a la ruta de búsqueda de archivos de vista previa de correo para la aplicación.

  • load_environment_config: Este inicializador se ejecuta antes de load_environment_hook. Carga el archivo config/environments para el entorno actual.

  • prepend_helpers_path: Agrega el directorio app/helpers de la aplicación, railties y motores a la ruta de búsqueda de ayudantes para la aplicación.

  • load_config_initializers: Carga todos los archivos Ruby de config/initializers en la aplicación, railties y motores. Los archivos en este directorio pueden usarse para guardar configuraciones que deben realizarse después de que se carguen todos los frameworks.

  • engines_blank_point: Proporciona un punto en la inicialización para engancharse si desea hacer algo antes de que se carguen los motores. Después de este punto, se ejecutan todos los inicializadores de railtie y motor.

  • add_generator_templates: Encuentra plantillas para generadores en lib/templates para la aplicación, railties y motores, y las agrega a la configuración config.generators.templates, que hará que las plantillas estén disponibles para que todos los generadores las referencien.

  • ensure_autoload_once_paths_as_subset: Asegura que config.autoload_once_paths solo contenga rutas de config.autoload_paths. Si contiene rutas adicionales, se lanzará una excepción.

  • add_to_prepare_blocks: El bloque para cada llamada config.to_prepare en la aplicación, un railtie o motor se agrega a los callbacks to_prepare para Action Dispatch, que se ejecutarán por solicitud en desarrollo, o antes de la primera solicitud en producción.

  • add_builtin_route: Si la aplicación se está ejecutando en el entorno de desarrollo, esto agregará la ruta para rails/info/properties a las rutas de la aplicación. Esta ruta proporciona la información detallada, como la versión de Rails y Ruby para public/index.html en una aplicación Rails predeterminada.

  • build_middleware_stack: Construye la pila de middleware para la aplicación, devolviendo un objeto que tiene un método call que toma un objeto de entorno de Rack para la solicitud.

  • eager_load!: Si config.eager_load es true, ejecuta los ganchos config.before_eager_load y luego llama a eager_load!, que cargará todos los config.eager_load_namespaces.

  • finisher_hook: Proporciona un gancho para después de que el proceso de inicialización de la aplicación esté completo, así como ejecutar todos los bloques config.after_initialize para la aplicación, railties y motores.

  • set_routes_reloader_hook: Configura Action Dispatch para recargar el archivo de rutas utilizando ActiveSupport::Callbacks.to_run.

  • disable_dependency_loading: Desactiva la carga automática de dependencias si config.eager_load está configurado en true.

8 Agrupación de Bases de Datos

Las conexiones de bases de datos de Active Record son gestionadas por ActiveRecord::ConnectionAdapters::ConnectionPool que asegura que un grupo de conexiones sincronice la cantidad de acceso de hilos a un número limitado de conexiones de base de datos. Este límite por defecto es 5 y puede configurarse en database.yml.

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

Dado que la agrupación de conexiones se maneja dentro de Active Record por defecto, todos los servidores de aplicaciones (Thin, Puma, Unicorn, etc.) deberían comportarse de la misma manera. El grupo de conexiones de la base de datos está inicialmente vacío. A medida que aumenta la demanda de conexiones, las creará hasta alcanzar el límite del grupo de conexiones.

Cualquier solicitud verificará una conexión la primera vez que requiera acceso a la base de datos. Al final de la solicitud, la verificará nuevamente. Esto significa que el espacio de conexión adicional estará disponible nuevamente para la siguiente solicitud en la cola.

Si intenta usar más conexiones de las disponibles, Active Record lo bloqueará y esperará una conexión del grupo. Si no puede obtener una conexión, se arrojará un error de tiempo de espera similar al que se muestra a continuación.

ActiveRecord::ConnectionTimeoutError - no se pudo obtener una conexión de base de datos en 5.000 segundos (esperó 5.000 segundos)

Si obtiene el error anterior, es posible que desee aumentar el tamaño del grupo de conexiones incrementando la opción pool en database.yml.

NOTA. Si está ejecutando en un entorno multihilo, podría haber una posibilidad de que varios hilos accedan a múltiples conexiones simultáneamente. Por lo tanto, dependiendo de su carga de solicitud actual, podría muy bien tener múltiples hilos compitiendo por un número limitado de conexiones.

9 Configuración Personalizada

Puede configurar su propio código a través del objeto de configuración de Rails con configuración personalizada bajo el espacio de nombres config.x, o directamente en config. La diferencia clave entre estos dos es que debe usar config.x si está definiendo configuraciones anidadas (ej: config.x.nested.hi), y solo config para configuraciones de nivel único (ej: config.hello).

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

Estos puntos de configuración están entonces disponibles a través del objeto de configuración:

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

También puede usar Rails::Application.config_for para cargar archivos de configuración completos:

# 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 o development_merchant_id

Rails::Application.config_for admite una configuración shared para agrupar configuraciones comunes. La configuración compartida se fusionará en la configuración del entorno.

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

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

10 Motores de Búsqueda Indexación

A veces, es posible que desee evitar que algunas páginas de su aplicación sean visibles en sitios de búsqueda como Google, Bing, Yahoo o Duck Duck Go. Los robots que indexan estos sitios primero analizarán el archivo http://your-site.com/robots.txt para saber qué páginas se les permite indexar.

Rails crea este archivo para usted dentro de la carpeta /public. Por defecto, permite a los motores de búsqueda indexar todas las páginas de su aplicación. Si desea bloquear la indexación en todas las páginas de su aplicación, use esto:

User-agent: *
Disallow: /

Para bloquear solo páginas específicas, es necesario usar una sintaxis más compleja. Aprenda en la documentación oficial.

11 Monitor de Sistema de Archivos con Eventos

Si la gema listen está cargada, Rails utiliza un monitor de sistema de archivos con eventos para detectar cambios cuando la recarga está habilitada:

group :development do
  gem "listen", "~> 3.5"
end

De lo contrario, en cada solicitud Rails recorrerá el árbol de la aplicación para verificar si algo ha cambiado.

En Linux y macOS no se necesitan gemas adicionales, pero se requieren algunas para *BSD y para Windows.

Tenga en cuenta que algunas configuraciones no son compatibles.


Comentarios

Se te anima a ayudar a mejorar la calidad de esta guía.

Por favor contribuye si ves algún error tipográfico o errores fácticos. Para comenzar, puedes leer nuestra sección de contribuciones a la documentación.

También puedes encontrar contenido incompleto o cosas que no están actualizadas. Por favor agrega cualquier documentación faltante para main. Asegúrate de revisar Guías Edge primero para verificar si los problemas ya están resueltos o no en la rama principal. Revisa las Guías de Ruby on Rails para estilo y convenciones.

Si por alguna razón detectas algo que corregir pero no puedes hacerlo tú mismo, por favor abre un issue.

Y por último, pero no menos importante, cualquier tipo de discusión sobre la documentación de Ruby on Rails es muy bienvenida en el Foro oficial de Ruby on Rails.