1 Ubicaciones para el código de inicialización
Rails ofrece cuatro lugares estándar para colocar el código de inicialización:
config/application.rb
- Archivos de configuración específicos del entorno
- Inicializadores
- Después de los inicializadores
2 Ejecutar código antes de Rails
En el raro caso de que tu aplicación necesite ejecutar algún código antes de que se cargue Rails en sí, colócalo antes de la llamada a require "rails/all"
en config/application.rb
.
3 Configuración de los componentes de Rails
En general, el trabajo de configurar Rails implica configurar los componentes de Rails, así como configurar Rails en sí. El archivo de configuración config/application.rb
y los archivos de configuración específicos del entorno (como config/environments/production.rb
) te permiten especificar las diferentes configuraciones que deseas pasar a todos los componentes.
Por ejemplo, podrías 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 deseas pasar configuraciones a componentes individuales de Rails, puedes hacerlo a través del mismo objeto config
en config/application.rb
:
config.active_record.schema_format = :ruby
Rails utilizará esa configuración en particular para configurar Active Record.
ADVERTENCIA: Utiliza los métodos de configuración públicos en lugar de llamar directamente a la clase asociada. Por ejemplo, utiliza Rails.application.config.action_mailer.options
en lugar de ActionMailer::Base.options
.
NOTA: Si necesitas aplicar configuración directamente a una clase, utiliza un gancho de carga diferida en un inicializador para evitar la carga automática de la clase antes de que se haya completado la inicialización. Esto fallará porque la carga automática durante la inicialización no se puede repetir de manera segura cuando la aplicación se recarga.
3.1 Valores predeterminados versionados
config.load_defaults
carga los 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 versiones más antiguas.
3.1.1 Valores predeterminados para la versión objetivo 7.1
config.action_controller.allow_deprecated_parameters_hash_equality
:false
config.action_dispatch.debug_exception_log_level
::error
config.action_dispatch.default_headers
:{ "X-Frame-Options" => "SAMEORIGIN", "X-XSS-Protection" => "0", "X-Content-Type-Options" => "nosniff", "X-Permitted-Cross-Domain-Policies" => "none", "Referrer-Policy" => "strict-origin-when-cross-origin" }
config.action_text.sanitizer_vendor
:Rails::HTML::Sanitizer.best_supported_vendor
config.action_view.sanitizer_vendor
:Rails::HTML::Sanitizer.best_supported_vendor
config.active_job.use_big_decimal_serializer
:true
config.active_record.allow_deprecated_singular_associations_name
:false
config.active_record.before_committed_on_all_records
:true
config.active_record.belongs_to_required_validates_foreign_key
:false
config.active_record.default_column_serializer
:nil
config.active_record.encryption.hash_digest_class
:OpenSSL::Digest::SHA256
config.active_record.encryption.support_sha1_for_non_deterministic_encryption
:false
config.active_record.marshalling_format_version
:7.1
config.active_record.query_log_tags_format
::sqlcommenter
config.active_record.raise_on_assign_to_attr_readonly
:true
config.active_record.run_after_transaction_callbacks_in_order_defined
:true
config.active_record.run_commit_callbacks_on_first_saved_instances_in_transaction
:false
config.active_record.sqlite3_adapter_strict_strings_by_default
:true
config.active_support.cache_format_version
:7.1
config.active_support.message_serializer
::json_allow_marshal
config.active_support.raise_on_invalid_cache_expiration_time
:true
config.active_support.use_message_serializer_for_metadata
:true
config.add_autoload_paths_to_load_path
:false
config.log_file_size
:100 * 1024 * 1024
config.precompile_filter_parameters
:true
3.1.2 Valores predeterminados para la versión objetivo 7.0
config.action_controller.raise_on_open_redirects
:true
config.action_controller.wrap_parameters_by_default
:true
config.action_dispatch.cookies_serializer
::json
config.action_dispatch.default_headers
:{ "X-Frame-Options" => "SAMEORIGIN", "X-XSS-Protection" => "0", "X-Content-Type-Options" => "nosniff", "X-Download-Options" => "noopen", "X-Permitted-Cross-Domain-Policies" => "none", "Referrer-Policy" => "strict-origin-when-cross-origin" }
config.action_mailer.smtp_timeout
:5
config.action_view.apply_stylesheet_media_default
:false
config.action_view.button_to_generates_button_tag
:true
config.active_record.automatic_scope_inversing
:true
config.active_record.partial_inserts
:false
config.active_record.verify_foreign_keys_for_fixtures
:true
config.active_storage.multiple_file_field_include_hidden
:true
config.active_storage.variant_processor
::vips
config.active_storage.video_preview_arguments
:"-vf 'select=eq(n\\,0)+eq(key\\,1)+gt(scene\\,0.015),loop=loop=-1:size=2,trim=start_frame=1' -frames:v 1 -f image2"
config.active_support.cache_format_version
:7.0
config.active_support.executor_around_test_case
:true
config.active_support.hash_digest_class
:OpenSSL::Digest::SHA256
config.active_support.isolation_level
::thread
config.active_support.key_generator_hash_digest_class
:OpenSSL::Digest::SHA256
Valores predeterminados para la versión objetivo 6.1
3.1.3 Valores predeterminados para la versión objetivo 6.0
config.action_dispatch.use_cookies_with_metadata
:true
config.action_mailer.delivery_job
:"ActionMailer::MailDeliveryJob"
config.action_view.default_enforce_utf8
:false
config.active_record.collection_cache_versioning
:true
config.active_storage.queues.analysis
::active_storage_analysis
config.active_storage.queues.purge
::active_storage_purge
3.1.4 Valores predeterminados para la versión objetivo 5.2
config.action_controller.default_protect_from_forgery
:true
config.action_dispatch.use_authenticated_cookie_encryption
:true
config.action_view.form_with_generates_ids
:true
config.active_record.cache_versioning
:true
config.active_support.hash_digest_class
:OpenSSL::Digest::SHA1
config.active_support.use_authenticated_message_encryption
:true
3.1.5 Valores predeterminados para la versión objetivo 5.1
config.action_view.form_with_generates_remote_forms
:true
config.assets.unknown_asset_fallback
:false
3.1.6 Valores predeterminados para la versión objetivo 5.0
ActiveSupport.to_time_preserves_timezone
:true
config.action_controller.forgery_protection_origin_check
:true
config.action_controller.per_form_csrf_tokens
:true
config.active_record.belongs_to_required_by_default
:true
config.ssl_options
:{ hsts: { subdomains: true } }
3.2 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 tener que 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 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 esta bandera, 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. Esto incluye la inicialización del propio framework, los motores y todos los inicializadores de la aplicación en config/initializers
. Tenga en cuenta que este bloque se ejecutará para las tareas de 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 forma concurrente. Esto solo debe establecerse en false
si el código de la aplicación no es seguro para subprocesos. El valor predeterminado 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 evitar las limitaciones de concurrencia incorporadas en los navegadores mediante el uso de alias de dominio diferentes. Versión abreviada de config.action_controller.asset_host
.
3.2.6 config.assume_ssl
Hace que la aplicación crea que todas las solicitudes llegan a través de SSL. Esto es útil cuando se utiliza un equilibrador de carga que termina SSL, la solicitud reenviada aparecerá como si fuera HTTP en lugar de HTTPS para la aplicación. Esto hace que las redirecciones y la seguridad de las cookies apunten a HTTP en lugar de HTTPS. Este middleware hace que el servidor asuma que el proxy ya terminó SSL y que la solicitud realmente es HTTPS.
3.2.7 config.autoflush_log
Permite escribir inmediatamente la salida del archivo de registro en lugar de almacenar en búfer. El valor predeterminado es true
.
3.2.8 config.autoload_once_paths
Acepta una matriz de rutas desde las cuales Rails cargará constantes que no se eliminarán por solicitud. Es relevante si la recarga está habilitada, lo cual es el valor predeterminado en el entorno development
. De lo contrario, la carga automática ocurre solo una vez. Todos los elementos de esta matriz también deben estar en autoload_paths
. El valor predeterminado es una matriz vacía.
3.2.9 config.autoload_paths
Acepta una matriz de rutas desde las cuales Rails cargará constantes. El valor predeterminado es una matriz vacía. Desde Rails 6, no se recomienda ajustar esto. Consulta Carga automática y recarga de constantes.
3.2.10 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 o cargarse de forma ansiosa. Por favor, pasa su nombre relativo a lib
en el argumento de palabra clave ignore
requerido. Por ejemplo,
config.autoload_lib(ignore: %w(assets tasks generators))
Consulta más detalles en la guía de carga automática.
3.2.11 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
se pueden cargar automáticamente, incluso desde inicializadores de la aplicación, pero no se volverán a cargar.
3.2.12 config.beginning_of_week
Establece el inicio de la semana predeterminado para la aplicación. Acepta un día de la semana válido como un símbolo (por ejemplo, :monday
).
3.2.13 config.cache_classes
Configuración antigua equivalente a !config.enable_reloading
. Compatible con la compatibilidad con versiones anteriores.
3.2.14 config.cache_store
Configura qué almacén 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 implementa la API de caché. El valor predeterminado es :file_store
. Consulta Almacenes de caché para opciones de configuración por almacén.
3.2.15 config.colorize_logging
Especifica si usar o no códigos de color ANSI al registrar información. El valor predeterminado es true
.
3.2.16 config.consider_all_requests_local
Es una bandera. Si es true
, cualquier error causará que se muestre 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
. Es true
de forma predeterminada en los entornos de desarrollo y prueba, y false
en producción. Para un control más detallado, establece esto en false
e implementa show_detailed_exceptions?
en los controladores para especificar qué solicitudes deben proporcionar información de depuración en caso de errores.
3.2.17 config.console
Te permite establecer la clase que se utilizará como consola cuando ejecutes 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 con seguridad pry aquí
require "pry"
config.console = Pry
end
3.2.18 config.content_security_policy_nonce_directives
Consulta Agregar un Nonce en la Guía de Seguridad.
3.2.19 config.content_security_policy_nonce_generator
Consulta Agregar un Nonce en la Guía de Seguridad.
3.2.20 config.content_security_policy_report_only
Consulta Informar Violaciones en la Guía de Seguridad.
3.2.21 config.credentials.content_path
La ruta del archivo de credenciales encriptadas.
El valor predeterminado es config/credentials/#{Rails.env}.yml.enc
si existe, o config/credentials.yml.enc
en caso 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.
El valor predeterminado es config/credentials/#{Rails.env}.key
si existe, o config/master.key
en caso 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 de API y :default
para aplicaciones normales.
3.2.24 config.disable_sandbox
Controla si alguien puede iniciar una consola en modo sandbox o no. Esto es útil para evitar una sesión de consola sandbox que se ejecute durante mucho tiempo y pueda hacer que el servidor de la base de datos se quede sin memoria. Por defecto, es false
.
3.2.25 config.eager_load
Cuando es true
, carga de forma anticipada todos los config.eager_load_namespaces
registrados. Esto incluye tu aplicación, motores, frameworks de Rails y cualquier otro namespace registrado.
3.2.26 config.eager_load_namespaces
Registra los namespaces que se cargan de forma anticipada cuando config.eager_load
está configurado como true
. Todos los namespaces en la lista deben responder al método eager_load!
.
3.2.27 config.eager_load_paths
Acepta una matriz de rutas desde las cuales Rails cargará de forma anticipada al iniciar si config.eager_load
es true
. Por defecto, incluye todas las carpetas en el directorio app
de la aplicación.
3.2.28 config.enable_reloading
Si config.enable_reloading
es true
, las clases y módulos de la aplicación se recargan entre las solicitudes web si cambian. Por defecto, es true
en el entorno de development
y false
en el entorno de production
.
También se define el predicado config.reloading_enabled?
.
3.2.29 config.encoding
Configura la codificación de toda la aplicación. Por defecto, es UTF-8.
3.2.30 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 deben manejar errores de ActionDispatch::Http::MimeNegotiation::InvalidType
, que se generan cuando un cliente envía un encabezado Accept
o Content-Type
inválido.
La aplicación ActionDispatch::PublicExceptions
por defecto hace esto automáticamente, estableciendo Content-Type
en text/html
y devolviendo un estado 406 Not Acceptable
.
Si no se maneja este error, se generará un error 500 Internal Server Error
.
Usar el RouteSet
de Rails.application.routes
como 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.31 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 incluye ActiveSupport::FileUpdateChecker
de forma predeterminada, y ActiveSupport::EventedFileUpdateChecker
(este último depende de la gema listen). Las clases personalizadas deben cumplir con la API de ActiveSupport::FileUpdateChecker
.
3.2.32 config.filter_parameters
Se utiliza para filtrar los parámetros que no se desean mostrar en los registros, como contraseñas o números de tarjetas de crédito. También filtra los valores sensibles de las columnas de la 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, :secret, :token, :_key, :crypt, :salt, :certificate, :otp, :ssn
]
El filtro de parámetros funciona mediante coincidencia parcial con expresiones regulares.
3.2.33 config.filter_redirect
Se utiliza para filtrar las URL de redireccionamiento de los registros de la aplicación.
Rails.application.config.filter_redirect += ['s3.amazonaws.com', /private-match/]
El filtro de redireccionamiento funciona probando que las URL incluyan cadenas o coincidan con expresiones regulares.
3.2.34 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 se puede configurar a través de config.ssl_options
.
3.2.35 config.helpers_paths
Define una matriz de rutas adicionales para cargar ayudantes de vista.
3.2.36 config.host_authorization
Acepta un hash de opciones para configurar el middleware HostAuthorization.
3.2.37 config.hosts
Una matriz de cadenas, expresiones regulares o IPAddr
utilizadas para validar el encabezado Host
. Utilizado por el middleware HostAuthorization para ayudar a prevenir ataques de reenvío DNS.
3.2.38 config.javascript_path
Establece la ruta donde se encuentra el JavaScript de tu aplicación en relación al directorio app
. El valor predeterminado es javascript
, utilizado por webpacker. La ruta de JavaScript configurada en la aplicación se excluye de autoload_paths
.
3.2.39 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, y sin límite en todos los demás entornos.
3.2.40 config.log_formatter
Define el formateador del registrador de Rails. Esta opción tiene como valor predeterminado una instancia de ActiveSupport::Logger::SimpleFormatter
para todos los entornos. Si estás configurando un valor para config.logger
, debes pasar manualmente el valor de tu formateador a tu registrador antes de que se envuelva en una instancia de ActiveSupport::TaggedLogging
, Rails no lo hará por ti.
3.2.41 config.log_level
Define la verbosidad del registrador de Rails. Esta opción tiene como valor predeterminado :debug
para todos los entornos excepto producción, donde tiene como valor predeterminado :info
. Los niveles de registro disponibles son: :debug
, :info
, :warn
, :error
, :fatal
y :unknown
.
3.2.42 config.log_tags
Acepta una lista de métodos a los que responde el objeto request
, un Proc
que acepta el objeto request
, o algo que responda a to_s
. Esto facilita la etiquetación de líneas de registro con información de depuración como el subdominio y el ID de solicitud, ambos muy útiles en la depuración de aplicaciones de producción con múltiples usuarios.
3.2.43 config.logger
Es el registrador que se utilizará para Rails.logger
y cualquier registro relacionado de 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/
. Puedes proporcionar un registrador personalizado, para obtener compatibilidad total debes seguir estas pautas:
- Para admitir un formateador, debes asignar manualmente un formateador del valor
config.log_formatter
al registrador. - Para admitir registros etiquetados, la instancia de registro debe envolverse con
ActiveSupport::TaggedLogging
. - Para admitir el silenciamiento, el registrador debe incluir el módulo
ActiveSupport::LoggerSilence
. La claseActiveSupport::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.44 config.middleware
Te 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.45 config.precompile_filter_parameters
Cuando es true
, precompilará config.filter_parameters
utilizando 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.46 config.public_file_server.enabled
Configura Rails para servir archivos estáticos desde el directorio public
. Esta opción tiene como valor predeterminado true
, pero en el entorno de producción se establece en false
porque el software del servidor (por ejemplo, NGINX o Apache) utilizado para ejecutar la aplicación debe servir archivos estáticos en su lugar. Si estás ejecutando o probando tu aplicación en producción utilizando WEBrick (no se recomienda utilizar WEBrick en producción), establece la opción en true
. De lo contrario, no podrás utilizar el almacenamiento en caché de páginas y solicitar archivos que existan en el directorio public
.
3.2.47 config.railties_order
Permite especificar manualmente el orden en que se cargan las Railties/Engines. El valor predeterminado es [:all]
.
config.railties_order = [Blog::Engine, :main_app, :all]
3.2.48 config.rake_eager_load
Cuando es true
, carga la aplicación de forma anticipada al ejecutar tareas de Rake. El valor predeterminado es false
.
3.2.49 config.read_encrypted_secrets
DEPRECIADO: Deberías usar credentials en lugar de secretos encriptados.
Cuando es true
, intentará leer secretos encriptados desde config/secrets.yml.enc
.
3.2.50 config.relative_url_root
Se puede utilizar para indicarle a Rails que se está implementando en un subdirectorio. El valor predeterminado es ENV['RAILS_RELATIVE_URL_ROOT']
.
3.2.51 config.reload_classes_only_on_change
Habilita o deshabilita la recarga de clases solo cuando cambian los archivos rastreados. De forma predeterminada, rastrea todo en las rutas de carga automática y se establece en true
. Si config.enable_reloading
es false
, esta opción se ignora.
3.2.52 config.require_master_key
Hace que la aplicación no se inicie si no se ha proporcionado una clave maestra a través de ENV["RAILS_MASTER_KEY"]
o el archivo config/master.key
.
3.2.53 config.secret_key_base
El valor de respaldo para especificar la clave de entrada para el generador de claves de una aplicación. Se recomienda dejar esto sin configurar y, en su lugar, especificar una secret_key_base
en config/credentials.yml.enc
. Consulta la documentación de la API secret_key_base
para obtener más información y métodos de configuración alternativos.
3.2.54 config.server_timing
Cuando es true
, agrega el middleware ServerTiming a la pila de middlewares.
3.2.55 config.session_options
Opciones adicionales pasadas a config.session_store
. Debes usar config.session_store
para establecer esto en lugar de modificarlo tú mismo.
config.session_store :cookie_store, key: "_your_app_session"
config.session_options # => {key: "_your_app_session"}
3.2.56 config.session_store
Especifica qué clase utilizar para almacenar la sesión. Los valores posibles son :cache_store
, :cookie_store
, :mem_cache_store
, un almacenamiento personalizado o :disabled
. :disabled
indica a Rails que no maneje las sesiones.
Esta configuración se realiza mediante una llamada a un 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 almacenamiento personalizado como un símbolo, se resolverá en el espacio de nombres ActionDispatch::Session
:
# utiliza ActionDispatch::Session::MyCustomStore como almacenamiento de sesión
config.session_store :my_custom_store
El almacenamiento predeterminado es un almacenamiento de cookies con el nombre de la aplicación como clave de sesión.
3.2.57 config.ssl_options
Opciones de configuración para el middleware ActionDispatch::SSL
.
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) | {} |
5.0 | { hsts: { subdomains: true } } |
3.2.58 config.time_zone
Establece la zona horaria predeterminada para la aplicación y habilita la conciencia de la zona horaria para Active Record.
3.2.59 config.x
Se utiliza para agregar fácilmente una 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
Consulta Configuración personalizada.
3.3 Configuración de activos
3.3.1 config.assets.css_compressor
Define el compresor CSS a utilizar. Se establece de forma predeterminada 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 utilizar. 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
Una bandera que habilita la creación de una versión comprimida con gzip de los activos compilados, junto con los activos no comprimidos. Se establece en true
de forma predeterminada.
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 se utilicen esas rutas en la búsqueda de activos.
3.3.5 config.assets.precompile
Permite especificar activos adicionales (que no sean application.css
y application.js
) que se deben precompilar cuando se ejecuta bin/rails assets:precompile
.
3.3.6 config.assets.unknown_asset_fallback
Permite modificar el comportamiento del pipeline de activos cuando un activo no está en el pipeline, si se utiliza sprockets-rails 3.2.0 o una versión 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 utilizará 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
Permite el uso de huellas digitales SHA256 en los nombres de los activos. Está activado por defecto (true
).
3.3.10 config.assets.debug
Deshabilita la concatenación y compresión de activos. Está activado por defecto en development.rb
(true
).
3.3.11 config.assets.version
Es una cadena de opción que se utiliza en la generación de hash SHA256. Esto se puede cambiar para forzar la recompilación de todos los archivos.
3.3.12 config.assets.compile
Es un booleano que se puede utilizar para activar la compilación en vivo de Sprockets en producción.
3.3.13 config.assets.logger
Acepta un registrador que cumple con la interfaz de Log4r o la clase Logger
predeterminada de Ruby. Por defecto es el mismo configurado en config.logger
. Establecer config.assets.logger
en false
desactivará el registro de los activos servidos.
3.3.14 config.assets.quiet
Deshabilita el registro de las solicitudes de activos. Está activado por defecto en development.rb
(true
).
3.4 Configuración de Generadores
Rails te permite modificar qué generadores se utilizan 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 utilizar en este bloque son los siguientes:
force_plural
permite nombres de modelos en plural. Por defecto esfalse
.helper
define si se generan o no helpers. Por defecto estrue
.integration_tool
define qué herramienta de integración se utiliza para generar pruebas de integración. Por defecto es:test_unit
.system_tests
define qué herramienta de integración se utiliza para generar pruebas de sistema. Por defecto es:test_unit
.orm
define qué ORM se utiliza. Por defecto esfalse
y utilizará Active Record por defecto.resource_controller
define qué generador se utiliza para generar un controlador al utilizarbin/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 estrue
.scaffold_controller
a diferencia deresource_controller
, define qué generador se utiliza para generar un controlador scaffolded al utilizarbin/rails generate scaffold
. Por defecto es:scaffold_controller
.test_framework
define qué framework de pruebas se utiliza. Por defecto esfalse
y utilizará minitest por defecto.template_engine
define qué motor de plantillas se utiliza, como ERB o Haml. Por defecto es:erb
.
3.5 Configuración de Middleware
Cada aplicación de Rails viene con un conjunto estándar de middleware que se utiliza en este orden en el entorno de desarrollo:
3.5.1 ActionDispatch::HostAuthorization
Protege contra ataques de rebinding DNS y otros ataques de encabezado Host
.
Se incluye en el entorno de desarrollo de forma predeterminada 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 de 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 con las entradas de hosts
utilizando el operador de caso (#===
), lo que permite que hosts
admita entradas de tipo Regexp
, Proc
e IPAddr
, entre otros. Aquí hay un ejemplo con una expresión regular.
# Permitir solicitudes desde 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, no coincidiría con www.product.com
.
Se admite un caso especial que le permite permitir todos los subdominios:
# Permitir solicitudes desde 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 host
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 métricas al encabezado Server-Timing
para verlas en las herramientas de desarrollo de un navegador.
3.5.3 ActionDispatch::SSL
Obliga a que cada solicitud se sirva utilizando HTTPS. Se habilita si config.force_ssl
está configurado como true
. Las opciones pasadas a esto se pueden configurar 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 de código segura para subprocesos. Deshabilitado si config.allow_concurrency
es false
, lo que hace que se cargue Rack::Lock
. 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 en memoria. Esta caché no es segura para subprocesos y está destinada únicamente 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) que tarda en ejecutarse la solicitud.
3.5.8 Rails::Rack::Logger
Notifica a los registros que la solicitud ha comenzado. Después de que se completa la solicitud, se vacían todos los registros.
3.5.9 ActionDispatch::ShowExceptions
Rescata cualquier excepción devuelta por la aplicación y muestra páginas de excepción agradables si la solicitud es local o si config.consider_all_requests_local
está configurado como true
. Si config.action_dispatch.show_exceptions
se establece en :none
, las excepciones se generarán de todos modos.
3.5.10 ActionDispatch::RequestId
Hace que un encabezado X-Request-Id único esté disponible en 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 la client_ip
válida 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 las respuestas cuyo cuerpo se sirve 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 los callbacks 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 utilizar un middleware alternativo para esto cambiando config.session_store
.
3.5.16 ActionDispatch::Flash
Configura las claves flash
. Solo está disponible si config.session_store
se establece en un valor.
3.5.17 Rack::MethodOverride
Permite que el método se anule si params[:_method]
está configurado. Este es el middleware que admite los tipos de método HTTP PATCH, PUT y DELETE.
3.5.18 Rack::Head
Convierte las solicitudes HEAD en solicitudes GET y las sirve como tal.
3.5.19 Agregar middleware personalizado
Además de estos middlewares habituales, puedes agregar los tuyos propios utilizando el método config.middleware.use
:
config.middleware.use Magical::Unicorns
Esto colocará el middleware Magical::Unicorns
al final de la pila. Puedes usar insert_before
si deseas agregar un middleware antes de otro.
config.middleware.insert_before Rack::Head, Magical::Unicorns
O puedes insertar un middleware en una posición exacta utilizando índices. Por ejemplo, si deseas insertar el middleware Magical::Unicorns
en la parte superior de la pila, puedes hacerlo de la siguiente manera:
config.middleware.insert_before 0, Magical::Unicorns
También existe insert_after
, que insertará un middleware después de otro:
config.middleware.insert_after Rack::Head, Magical::Unicorns
Los middlewares también se pueden reemplazar por completo con otros:
config.middleware.swap ActionController::Failsafe, Lifo::Failsafe
Los middlewares 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 puedes moverlo después:
config.middleware.move_after ActionDispatch::Flash, Magical::Unicorns
También se pueden eliminar por completo 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, incluye todas las claves de locales encontradas en los archivos de locales, generalmente solo :en
en una nueva aplicación.
3.6.2 config.i18n.default_locale
Establece el locale predeterminado de una aplicación utilizado 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 declararse en la lista available_locales
, generando una excepción I18n::InvalidLocale
al establecer un locale no disponible. Por defecto, es true
. Se recomienda no deshabilitar esta opción a menos que sea estrictamente necesario, ya que funciona como una medida de seguridad contra la configuración de cualquier locale no válido desde la entrada del usuario.
3.6.4 config.i18n.load_path
Establece la ruta que Rails utiliza 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 generar un error por las traducciones faltantes. Por defecto, esto es false
.
3.6.6 config.i18n.fallbacks
Establece el comportamiento de fallback para las traducciones faltantes. Aquí hay 3 ejemplos de uso para esta opción:
Puedes configurar la opción en
true
para usar el locale predeterminado como fallback, de la siguiente manera:config.i18n.fallbacks = true
O puedes configurar un array de locales como fallback, de la siguiente manera:
config.i18n.fallbacks = [:tr, :en]
O puedes configurar diferentes fallbacks para los locales individualmente. Por ejemplo, si deseas usar
:tr
como fallback para:az
y:de
, y:en
para:da
, puedes hacerlo de la siguiente manera:config.i18n.fallbacks = { az: :tr, da: [:de, :en] } #o config.i18n.fallbacks.map = { az: :tr, da: [:de, :en] }
Configurando Active Model
3.6.7 config.active_model.i18n_customize_full_message
Controla si se puede sobrescribir el formato Error#full_message
en un archivo de localización i18n. El valor predeterminado es false
.
Cuando se establece en true
, full_message
buscará un formato en el atributo y en el nivel del modelo de los archivos de localización. 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:
# Sobrescribe el formato para todos los atributos de Person:
format: "Invalid %{attribute} (%{message})"
attributes:
age:
# Sobrescribe el formato para el atributo age:
format: "%{message}"
blank: "Por favor complete su %{attribute}"
irb> person = Person.new.tap(&:valid?)
irb> person.errors.full_messages
=> [
"Invalid Name (no puede estar en blanco)",
"Por favor complete su Age"
]
irb> person.errors.messages
=> {
:name => ["no puede estar en blanco"],
:age => ["Por favor complete su Age"]
}
3.7 Configurando Active Record
config.active_record
incluye una variedad de opciones de configuración:
3.7.1 config.active_record.logger
Acepta un registrador que cumple con la interfaz de Log4r o la clase de registro predeterminada de Ruby, que luego se pasa a cualquier nueva conexión de base de datos realizada. Puede recuperar este registrador llamando a logger
en una clase de modelo de Active Record o en una instancia de modelo de Active Record. Establezca en nil
para deshabilitar el registro.
3.7.2 config.active_record.primary_key_prefix_type
Le permite ajustar la nomenclatura de las columnas de clave primaria. De forma predeterminada, Rails asume que las columnas de clave primaria se llaman id
(y esta opción de configuración no necesita establecerse). Hay otras dos opciones:
:table_name
haría que la clave primaria para la clase Customer seacustomerid
.:table_name_with_underscore
haría que la clave primaria para la clase Customer seacustomer_id
.
3.7.3 config.active_record.table_name_prefix
Le permite establecer una cadena global que se antepondrá a los nombres de tabla. Si establece esto en northwest_
, entonces la clase Customer buscará northwest_customers
como su tabla. El valor predeterminado es una cadena vacía.
3.7.4 config.active_record.table_name_suffix
Le permite establecer una cadena global que se agregará a los nombres de tabla. Si establece esto en _northwest
, entonces la clase Customer buscará customers_northwest
como su tabla. El valor predeterminado es una cadena vacía.
3.7.5 config.active_record.schema_migrations_table_name
Le permite establecer una cadena que se utilizará como el nombre de la tabla de migraciones de esquema.
3.7.6 config.active_record.internal_metadata_table_name
Le permite establecer una cadena que se utilizará como el nombre de la tabla de metadatos internos.
3.7.7 config.active_record.protected_environments
Le permite establecer una matriz de nombres de entornos donde se deben prohibir las acciones destructivas.
3.7.8 config.active_record.pluralize_table_names
Especifica si Rails buscará nombres de tabla en singular o en plural en la base de datos. Si se establece en true
(el valor predeterminado), entonces la clase Customer utilizará la tabla customers
. Si se establece en false
, entonces la clase Customer utilizará la tabla customer
.
3.7.9 config.active_record.default_timezone
Determina si se utilizará 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.7.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.7.11 config.active_record.error_on_ignored_order
Especifica si se debe generar un error si se ignora el orden de una consulta durante una consulta por lotes. Las opciones son true
(generar error) o false
(advertir). El valor predeterminado es false
.
3.7.12 config.active_record.timestamped_migrations
Controla si las migraciones se numeran con enteros seriales o con marcas de tiempo. El valor predeterminado es true
, para usar marcas de tiempo, que son preferibles si hay varios desarrolladores trabajando en la misma aplicación.
3.7.13 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
- Las advertencias de la base de datos se ignorarán. Este es el valor predeterminado.:log
- Las advertencias de la base de datos se registrarán a través deActiveRecord.logger
en el nivel:warn
.:raise
- Las advertencias de la base de datos se generarán comoActiveRecord::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 personalizado de informe de excepciones Bugsnag.notify(warning.message) do |notification| notification.add_metadata(:warning_code, warning.code) notification.add_metadata(:warning_level, warning.level) end end
3.7.14 config.active_record.db_warnings_ignore
Especifica una lista blanca de códigos y mensajes de advertencia que se ignorarán, independientemente de la db_warnings_action
configurada. El comportamiento predeterminado es informar todas las advertencias. Las advertencias a ignorar se pueden especificar como cadenas o expresiones regulares. 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/,
"Un mensaje de advertencia exacto",
"1062", # Error 1062 de MySQL: entrada duplicada
]
3.7.15 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 en el adaptador de conexión. Las estrategias personalizadas deben heredar de ActiveRecord::Migration::ExecutionStrategy
,
o pueden heredar de DefaultStrategy
, que conservará 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.7.16 config.active_record.lock_optimistically
Controla si Active Record utilizará bloqueo optimista y es true
de forma predeterminada.
3.7.17 config.active_record.cache_timestamp_format
Controla el formato del valor de marca de tiempo en la clave de caché. El valor predeterminado es :usec
.
3.7.18 config.active_record.record_timestamps
Es un valor booleano que controla si se realizan o no marcas de tiempo en las operaciones de create
y update
en un modelo. El valor predeterminado es true
.
3.7.19 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 al valor predeterminado).
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.0 | false |
3.7.20 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). Tenga en cuenta que al utilizar actualizaciones parciales, también debe utilizar 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.7.21 config.active_record.maintain_test_schema
Es un valor booleano que controla si Active Record debe intentar mantener actualizado el esquema de la base de datos de pruebas con db/schema.rb
(o db/structure.sql
) cuando se ejecutan las pruebas. El valor predeterminado es true
.
3.7.22 config.active_record.dump_schema_after_migration
Es una bandera que controla si se debe realizar un volcado del esquema (db/schema.rb
o db/structure.sql
) cuando se ejecutan las 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.7.23 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 de schema_search_path
, o una cadena de esquemas separados por comas.
3.7.24 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.7.25 config.active_record.belongs_to_required_by_default
Es un valor booleano que 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 objetivo de config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | nil |
5.0 | true |
3.7.26 config.active_record.belongs_to_required_validates_foreign_key
Habilita la validación solo de las columnas relacionadas con el padre para verificar su 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.7.27 config.active_record.marshalling_format_version
Cuando se establece en 7.1
, habilita una serialización más eficiente de una 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 utilizan el formato antiguo aún se pueden leer, independientemente de si se habilita esta optimización.
A partir de la versión | El valor predeterminado es |
---|---|
(original) | 6.1 |
7.1 | 7.1 |
3.7.28 config.active_record.action_on_strict_loading_violation
Permite lanzar o registrar una excepción si se establece strict_loading en una asociación. El valor predeterminado es :raise
en todos los entornos. Se puede cambiar a :log
para enviar las violaciones al registro en lugar de lanzar una excepción.
3.7.29 config.active_record.strict_loading_by_default
Es un valor booleano que habilita o deshabilita el modo strict_loading de forma predeterminada. El valor predeterminado es false
.
3.7.30 config.active_record.warn_on_records_fetched_greater_than
Permite establecer un umbral de advertencia para el tamaño del resultado de una consulta. Si el número de registros devueltos por una consulta supera el umbral, se registra una advertencia. Esto se puede utilizar para identificar consultas que podrían estar causando un aumento de memoria.
3.7.31 config.active_record.index_nested_attribute_errors
Permite mostrar errores para relaciones has_many
anidadas con un índice además del error. El valor predeterminado es false
.
3.7.32 config.active_record.use_schema_cache_dump
Permite a los usuarios obtener información de la caché del esquema desde 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.7.33 config.active_record.cache_versioning
Indica si se debe utilizar un método #cache_key
estable que esté acompañado por una versión cambiante en el método #cache_version
.
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 |
5.2 | true |
3.7.34 config.active_record.collection_cache_versioning
Permite reutilizar la misma clave de caché cuando el objeto que se está almacenando en caché de tipo ActiveRecord::Relation
cambia moviendo la información volátil (máximo actualizado y recuento) de la clave de caché de la relación hacia la versión de caché para admitir la reutilización de la clave de caché.
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.0 | true |
3.7.35 config.active_record.has_many_inversing
Permite establecer el registro inverso al atravesar las asociaciones de belongs_to
a has_many
.
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.7.36 config.active_record.automatic_scope_inversing
Permite inferir automáticamente inverse_of
para las asociaciones con un ámbito.
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.7.37 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.7.38 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
. Si todo lo demás es igual, un tamaño de lote más bajo encolará más trabajos en segundo plano de menor duración, mientras que un tamaño de lote más alto encolará menos trabajos en segundo plano de mayor duración. Este opción tiene un valor predeterminado de nil
, lo que hará que todos los registros dependientes de una asociación determinada se destruyan en el mismo trabajo en segundo plano.
3.7.39 config.active_record.queues.destroy
Permite especificar la cola de Active Job que se utilizará para los trabajos de destrucción. Cuando esta opción es nil
, los trabajos de purga se envían a la cola de Active Job predeterminada (consulte config.active_job.default_queue_name
). El valor predeterminado es nil
.
3.7.40 config.active_record.enumerate_columns_in_select_statements
Cuando es true
, siempre se incluirán los nombres de las columnas en las declaraciones SELECT
y se evitarán las consultas de tipo SELECT * FROM ...
. Esto evita errores en la caché de declaraciones preparadas al agregar columnas a una base de datos PostgreSQL, por ejemplo. El valor predeterminado es false
.
3.7.41 config.active_record.verify_foreign_keys_for_fixtures
Asegura que todas las restricciones de clave externa sean válidas después de cargar los fixtures en las pruebas. Compatible solo con PostgreSQL y SQLite.
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.7.42 config.active_record.raise_on_assign_to_attr_readonly
Permite generar una excepción al asignar atributos attr_readonly
. El comportamiento anterior permitía la asignación pero 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.7.43 config.active_record.run_commit_callbacks_on_first_saved_instances_in_transaction
Cuando varias 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, aunque su estado de instancia pueda estar desactualizado.
Cuando es false
, los callbacks transaccionales se ejecutan en las instancias con el estado de instancia más actualizado. Estas instancias se eligen de la siguiente manera:
- En general, se ejecutan los 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 y luego se actualiza por otra instancia, los callbacks
after_create_commit
se ejecutarán en la segunda instancia. Esto es en lugar de los callbacksafter_update_commit
que se ejecutarían ingenuamente según el estado de esa instancia. - Si el registro se destruye dentro de la transacción, los callbacks
after_destroy_commit
se ejecutarán en la última instancia destruida, incluso si una instancia desactualizada realiza posteriormente una actualización (que no habrá afectado a ninguna fila).
- Si el registro se crea dentro de la transacción y luego se actualiza por otra instancia, los callbacks
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 |
3.7.44 config.active_record.default_column_serializer
La implementación del serializador que se utilizará si no se especifica explícitamente para una columna determinada.
Históricamente, serialize
y store
, aunque permiten el uso de implementaciones de serializador alternativas, utilizarían YAML
de forma predeterminada, pero no es un formato muy eficiente y puede ser fuente de vulnerabilidades de seguridad si no se utiliza con cuidado.
Por lo tanto, se recomienda preferir formatos más estrictos y limitados para la serialización de bases de datos.
Desafortunadamente, no hay realmente ninguna opción predeterminada adecuada disponible en la biblioteca estándar de Ruby. JSON
podría funcionar como formato, pero las gemas json
convertirán los tipos no admitidos en cadenas, lo que puede provocar errores.
El valor predeterminado depende de la versión objetivo de config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | YAML |
7.1 | nil |
3.7.45 config.active_record.run_after_transaction_callbacks_in_order_defined
Si es true
, los callbacks after_commit
se ejecutan en el orden en que se definen en un modelo. Si 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 se use prepend: true
).
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.7.46 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 se establece en true
, las sentencias preparadas de la base de datos se desactivarán automáticamente.
3.7.47 config.active_record.query_log_tags
Define una Array
que especifica las etiquetas clave/valor que se insertarán en un comentario SQL. El valor predeterminado es [ :application ]
, una etiqueta predefinida que devuelve el nombre de la aplicación.
3.7.48 config.active_record.query_log_tags_format
Un Symbol
que especifica el formateador a utilizar para las etiquetas. Los valores válidos son :sqlcommenter
y :legacy
.
El valor predeterminado depende de la versión objetivo de config.load_defaults
:
| A partir de la versión | El valor predeterminado es |
| --------------------- | -------------------- |
| (original) | :legacy
|
| 7.1 | :sqlcommenter
|
3.7.49 config.active_record.cache_query_log_tags
Especifica si se debe habilitar o no el almacenamiento en caché de las etiquetas de registro de consultas. Para aplicaciones que tienen un gran número de consultas, el almacenamiento en caché de 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 la ejecución del trabajo. El valor predeterminado es false
.
3.7.50 config.active_record.schema_cache_ignored_tables
Define la lista de tablas que se deben ignorar al generar la caché del esquema. Acepta una Array
de cadenas que representan los nombres de las tablas o expresiones regulares.
3.7.51 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. De forma predeterminada, el indicador es true
en desarrollo y false
en todos los demás entornos.
3.7.52 config.active_record.sqlite3_adapter_strict_strings_by_default
Especifica si se debe utilizar el adaptador SQLite3 en un modo de cadenas estrictas. El uso de un modo de cadenas estrictas deshabilita las literales de cadena entre comillas dobles.
SQLite tiene algunas peculiaridades en torno a las literales de cadena entre comillas dobles. Primero intenta considerar las cadenas entre comillas dobles como nombres de identificadores, pero si no existen, entonces las considera como literales de cadena. Debido a esto, los errores tipográficos pueden pasar desapercibidos. Por ejemplo, es posible crear un índice para una columna que no existe. Consulte la documentación de SQLite para obtener más detalles.
El valor predeterminado depende de la versión objetivo config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | false |
7.1 | true |
3.7.53 config.active_record.async_query_executor
Especifica cómo se agrupan las consultas asíncronas.
De forma predeterminada, es nil
, lo que significa que load_async
está deshabilitado y, en su lugar, las consultas se ejecutan directamente en primer plano. Para que las consultas se realicen de forma asíncrona, debe establecerse en :global_thread_pool
o :multi_thread_pool
.
:global_thread_pool
utilizará un único grupo para todas las bases de datos a las que se conecta la aplicación. Esta es la configuración preferida para aplicaciones con una sola base de datos o aplicaciones que solo consultan una sola fragmentación de base de datos a la vez.
:multi_thread_pool
utilizará un grupo por base de datos, y el tamaño de cada grupo 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 al mismo tiempo y que necesitan definir de manera más precisa la concurrencia máxima.
3.7.54 config.active_record.global_executor_concurrency
Se utiliza en conjunto con config.active_record.async_query_executor = :global_thread_pool
y define cuántas consultas asíncronas se pueden ejecutar simultáneamente.
El valor predeterminado es 4
.
Este número debe considerarse en relación con el tamaño del grupo de conexiones configurado en database.yml
. El grupo de conexiones debe ser lo suficientemente grande como para acomodar tanto los hilos en primer plano (por ejemplo, hilos del servidor web o del trabajador de tareas) como los hilos en segundo plano.
3.7.55 config.active_record.allow_deprecated_singular_associations_name
Esto habilita el comportamiento obsoleto en el que las asociaciones singulares se pueden referir por su nombre en plural en las cláusulas where
. Establecer esto en false
es más eficiente.
class Comment < ActiveRecord::Base
belongs_to :post
end
Comment.where(post: post_id).count # => 5
# Cuando `allow_deprecated_singular_associations_name` es true:
Comment.where(posts: post_id).count # => 5 (advertencia de obsolescencia)
# Cuando `allow_deprecated_singular_associations_name` es false:
Comment.where(posts: post_id).count # => error
El valor predeterminado depende de la versión objetivo config.load_defaults
:
| A partir de la versión | El valor predeterminado es |
| --------------------- | -------------------- |
| (original) | true
|
| 7.1 | false
|
3.7.56 config.active_record.yaml_column_permitted_classes
El valor predeterminado es [Symbol]
. Permite a las aplicaciones incluir clases permitidas adicionales en safe_load()
en ActiveRecord::Coders::YAMLColumn
.
3.7.57 config.active_record.use_yaml_unsafe_load
El valor predeterminado es false
. Permite a las aplicaciones optar por utilizar unsafe_load
en ActiveRecord::Coders::YAMLColumn
.
3.7.58 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 más ancho que la representación de 64 bits con signo.
3.7.59 ActiveRecord::ConnectionAdapters::Mysql2Adapter.emulate_booleans
y ActiveRecord::ConnectionAdapters::TrilogyAdapter.emulate_booleans
Controla si el adaptador de MySQL de Active Record considerará todas las columnas tinyint(1)
como booleanas. El valor predeterminado es true
.
3.7.60 ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.create_unlogged_tables
Controla si las tablas de la base de datos creadas por PostgreSQL deben ser "sin registro", lo que puede acelerar el rendimiento pero aumenta el riesgo de pérdida de datos si la base de datos se bloquea. Se recomienda encarecidamente no habilitar esto en un entorno de producción. El valor predeterminado es false
en todos los entornos.
Para habilitarlo en las pruebas:
# config/environments/test.rb
ActiveSupport.on_load(:active_record_postgresqladapter) do
self.create_unlogged_tables = true
end
3.7.61 ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.datetime_type
Controla qué tipo nativo debe usar el adaptador de PostgreSQL de Active Record cuando se llama 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 without time zone".
Para usar "timestamp with time zone":
# 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.7.62 ActiveRecord::SchemaDumper.ignore_tables
Acepta una matriz de tablas que no deben incluirse en ningún archivo de esquema generado.
3.7.63 ActiveRecord::SchemaDumper.fk_ignore_pattern
Permite establecer una expresión regular diferente que se utilizará para decidir si el nombre de una clave externa debe incluirse o no en db/schema.rb. De forma predeterminada, los nombres de las claves externas que comienzan con fk_rails_
no se exportan al volcado del esquema de la base de datos. El valor predeterminado es /^fk_rails_[0-9a-f]{10}$/
.
3.7.64 config.active_record.encryption.hash_digest_class
Establece el algoritmo de resumen utilizado por Active Record Encryption.
El valor predeterminado depende de la versión objetivo de config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | OpenSSL::Digest::SHA1 |
7.1 | OpenSSL::Digest::SHA256 |
3.7.65 config.active_record.encryption.support_sha1_for_non_deterministic_encryption
Permite admitir el descifrado de datos existentes cifrados utilizando una clase de resumen SHA-1. Cuando es false
, solo admitirá el resumen configurado en config.active_record.encryption.hash_digest_class
.
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 |
3.8 Configurando Action Controller
config.action_controller
incluye varias configuraciones:
3.8.1 config.action_controller.asset_host
Establece el host para los activos. Útil cuando se utilizan CDN para alojar activos en lugar del propio servidor de la aplicación. Solo debes usar esto si tienes una configuración diferente para Action Mailer, de lo contrario usa config.asset_host
.
3.8.2 config.action_controller.perform_caching
Configura si la aplicación debe realizar las funciones de almacenamiento en caché proporcionadas por el componente Action Controller o no. Establecido en false
en el entorno de desarrollo, true
en producción. Si no se especifica, el valor predeterminado será true
.
3.8.3 config.action_controller.default_static_extension
Configura la extensión utilizada para las páginas en caché. El valor predeterminado es .html
.
3.8.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.8.5 config.action_controller.logger
Acepta un registrador que cumple con la interfaz de Log4r o la clase de registro predeterminada de Ruby, que luego se utiliza para registrar información desde Action Controller. Establecer en nil
para deshabilitar el registro.
3.8.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
de forma predeterminada.
3.8.7 config.action_controller.allow_forgery_protection
Habilita o deshabilita la protección CSRF. De forma predeterminada, esto es false
en el entorno de prueba y true
en todos los demás entornos.
3.8.8 config.action_controller.forgery_protection_origin_check
Configura si se debe verificar el encabezado HTTP Origin
contra el origen del sitio como una defensa CSRF adicional.
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 |
5.0 | true |
3.8.9 config.action_controller.per_form_csrf_tokens
Configura si los tokens CSRF solo son válidos para el método/acción para el que se generaron.
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 |
5.0 | true |
3.8.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 objetivo de config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | false |
5.2 | true |
3.8.11 config.action_controller.relative_url_root
Se puede usar para indicar a Rails que se está implementando en un subdirectorio. El valor predeterminado es
config.relative_url_root
.
3.8.12 config.action_controller.permit_all_parameters
Establece que todos los parámetros para la asignación masiva están permitidos de forma predeterminada. El valor predeterminado es false
.
3.8.13 config.action_controller.action_on_unpermitted_parameters
Controla el comportamiento cuando se encuentran parámetros que no están permitidos explícitamente. El valor predeterminado es :log
en los entornos de prueba y desarrollo, false
en otros casos. Los valores pueden ser:
false
para no tomar ninguna acción:log
para emitir un eventoActiveSupport::Notifications.instrument
en el temaunpermitted_parameters.action_controller
y registrar en el nivel DEBUG:raise
para generar una excepciónActionController::UnpermittedParameters
3.8.14 config.action_controller.always_permitted_parameters
Establece una lista de parámetros permitidos que están permitidos de forma predeterminada. Los valores predeterminados son ['controller', 'action']
.
3.8.15 config.action_controller.enable_fragment_cache_logging
Determina si se registran las lecturas y escrituras de la caché de fragmentos en formato detallado de la siguiente manera:
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]
De forma predeterminada, está configurado 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.8.16 config.action_controller.raise_on_open_redirects
Genera un ActionController::Redirecting::UnsafeRedirectError
cuando se produce una redirección abierta no permitida.
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.8.17 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.8.18 config.action_controller.wrap_parameters_by_default
Configura el ParamsWrapper
para envolver las solicitudes json de forma predeterminada.
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.8.19 ActionController::Base.wrap_parameters
Configura el ParamsWrapper
. Esto se puede llamar a nivel superior o en controladores individuales.
3.8.20 config.action_controller.allow_deprecated_parameters_hash_equality
Controla el comportamiento de ActionController::Parameters#==
con argumentos Hash
. El valor de la configuración determina si una instancia de ActionController::Parameters
es igual a un Hash
equivalente.
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 |
3.9 Configuración de Action Dispatch
3.9.1 config.action_dispatch.cookies_serializer
Especifica qué serializador usar para las cookies. Acepta los mismos valores que config.active_support.message_serializer
, más :hybrid
que es un alias para :json_allow_marshal
.
El valor predeterminado depende de la versión objetivo de config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | :marshal |
7.0 | :json |
3.9.2 config.action_dispatch.debug_exception_log_level
Configura el nivel de registro utilizado por el middleware DebugExceptions al registrar excepciones no capturadas durante las solicitudes.
El valor predeterminado depende de la versión objetivo de config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | :fatal |
7.1 | :error |
3.9.3 config.action_dispatch.default_headers
Es un hash con encabezados HTTP que se establecen de forma predeterminada en cada respuesta.
El valor predeterminado depende de la versión objetivo de config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) |
|
7.0 |
|
7.1 |
|
3.9.4 config.action_dispatch.default_charset
Especifica el conjunto de caracteres predeterminado para todas las representaciones. Por defecto es nil
.
3.9.5 config.action_dispatch.tld_length
Establece la longitud del dominio de nivel superior (TLD, por sus siglas en inglés) para la aplicación. Por defecto es 1
.
3.9.6 config.action_dispatch.ignore_accept_header
Se utiliza para determinar si se deben ignorar los encabezados de aceptación de una solicitud. Por defecto es false
.
3.9.7 config.action_dispatch.x_sendfile_header
Especifica el encabezado X-Sendfile específico del servidor. Esto es útil para enviar archivos acelerados desde el servidor. Por ejemplo, se puede establecer en 'X-Sendfile' para Apache.
3.9.8 config.action_dispatch.http_auth_salt
Establece el valor de sal de autenticación HTTP. Por defecto es 'http authentication'
.
3.9.9 config.action_dispatch.signed_cookie_salt
Establece el valor de sal de las cookies firmadas. Por defecto es 'signed cookie'
.
3.9.10 config.action_dispatch.encrypted_cookie_salt
Establece el valor de sal de las cookies cifradas. Por defecto es 'encrypted cookie'
.
3.9.11 config.action_dispatch.encrypted_signed_cookie_salt
Establece el valor de sal de las cookies firmadas y cifradas. Por defecto es 'signed encrypted cookie'
.
3.9.12 config.action_dispatch.authenticated_encrypted_cookie_salt
Establece la sal de las cookies cifradas autenticadas. Por defecto es 'authenticated encrypted cookie'
.
3.9.13 config.action_dispatch.encrypted_cookie_cipher
Establece el cifrado que se utilizará para las cookies cifradas. Esto es por defecto "aes-256-gcm"
.
3.9.14 config.action_dispatch.signed_cookie_digest
Establece el algoritmo de resumen que se utilizará para las cookies firmadas. Esto tiene un valor predeterminado de "SHA1"
.
3.9.15 config.action_dispatch.cookies_rotations
Permite rotar secretos, cifrados y resúmenes para cookies encriptadas y firmadas.
3.9.16 config.action_dispatch.use_authenticated_cookie_encryption
Controla si las cookies firmadas y encriptadas utilizan el cifrado AES-256-GCM o el cifrado AES-256-CBC más antiguo.
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 |
5.2 | true |
3.9.17 config.action_dispatch.use_cookies_with_metadata
Permite escribir cookies con metadatos incrustados.
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.0 | true |
3.9.18 config.action_dispatch.perform_deep_munge
Configura si el método deep_munge
debe realizarse en los parámetros. Consulta la Guía de seguridad para obtener más información. El valor predeterminado es true
.
3.9.19 config.action_dispatch.rescue_responses
Configura qué excepciones se asignan a un código de estado HTTP. Acepta un hash y puedes especificar pares de excepción/estado. Por defecto, se define de la siguiente manera:
config.action_dispatch.rescue_responses = {
'ActionController::RoutingError'
=> :not_found,
'AbstractController::ActionNotFound'
=> :not_found,
'ActionController::MethodNotAllowed'
=> :method_not_allowed,
'ActionController::UnknownHttpMethod'
=> :method_not_allowed,
'ActionController::NotImplemented'
=> :not_implemented,
'ActionController::UnknownFormat'
=> :not_acceptable,
'ActionController::InvalidAuthenticityToken'
=> :unprocessable_entity,
'ActionController::InvalidCrossOriginRequest'
=> :unprocessable_entity,
'ActionDispatch::Http::Parameters::ParseError'
=> :bad_request,
'ActionController::BadRequest'
=> :bad_request,
'ActionController::ParameterMissing'
=> :bad_request,
'Rack::QueryParser::ParameterTypeError'
=> :bad_request,
'Rack::QueryParser::InvalidParameterError'
=> :bad_request,
'ActiveRecord::RecordNotFound'
=> :not_found,
'ActiveRecord::StaleObjectError'
=> :conflict,
'ActiveRecord::RecordInvalid'
=> :unprocessable_entity,
'ActiveRecord::RecordNotSaved'
=> :unprocessable_entity
}
Cualquier excepción que no esté configurada se asignará a un error interno del servidor 500.
3.9.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
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | nil |
6.1 | :lax |
3.9.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
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | 307 |
6.1 | 308 |
3.9.22 config.action_dispatch.log_rescued_responses
Permite registrar las excepciones no controladas configuradas en rescue_responses
. El valor predeterminado es true
.
3.9.23 ActionDispatch::Callbacks.before
Toma un bloque de código para ejecutar antes de la solicitud.
3.9.24 ActionDispatch::Callbacks.after
Toma un bloque de código para ejecutar después de la solicitud.
3.10 Configurando Action View
config.action_view
incluye un pequeño número de configuraciones:
3.10.1 config.action_view.cache_template_loading
Controla si las plantillas deben recargarse en cada solicitud o no. El valor predeterminado es !config.enable_reloading
.
3.10.2 config.action_view.field_error_proc
Proporciona un generador 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.10.3 config.action_view.default_form_builder
Indica a Rails qué constructor de formularios utilizar de forma predeterminada. El valor predeterminado es ActionView::Helpers::FormBuilder
. Si deseas que tu clase de constructor de formularios se cargue después de la inicialización (para que se recargue en cada solicitud en desarrollo), puedes pasarla como una String
.
3.10.4 config.action_view.logger
Acepta un registrador que cumpla con la interfaz de Log4r o la clase de registro predeterminada de Ruby, que luego se utiliza para registrar información de Action View. Establecer en nil
para desactivar el registro.
3.10.5 config.action_view.erb_trim_mode
Indica el modo de recorte que se utilizará en ERB. Por defecto, es '-'
, lo que activa el recorte de espacios finales y saltos de línea al usar <%= -%>
o <%= =%>
. Consulte la documentación de Erubis para obtener más información.
3.10.6 config.action_view.frozen_string_literal
Compila la plantilla ERB con el comentario mágico # frozen_string_literal: true
, lo que hace que todas las literales de cadena estén congeladas y ahorra asignaciones. Establecer en true
para habilitarlo en todas las vistas.
3.10.7 config.action_view.embed_authenticity_token_in_remote_forms
Permite establecer el comportamiento predeterminado para authenticity_token
en formularios con remote: true
. De forma predeterminada, está establecido en false
, lo que significa que los formularios remotos no incluirán authenticity_token
, lo cual es útil cuando se está fragmentando en caché el formulario. Los formularios remotos obtienen la autenticidad de la etiqueta meta
, por lo que la incrustación es innecesaria a menos que se admitan navegadores sin JavaScript. En ese caso, puede pasar authenticity_token: true
como opción de formulario o establecer esta configuración en true
.
3.10.8 config.action_view.prefix_partial_path_with_controller_namespace
Determina si las parciales se buscan en un subdirectorio en las plantillas renderizadas desde controladores con espacios de nombres. Por ejemplo, considere un controlador llamado Admin::ArticlesController
que renderiza esta plantilla:
<%= render @article %>
La configuración predeterminada es true
, lo que utiliza la parcial 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 espacios de nombres como ArticlesController
.
3.10.9 config.action_view.automatically_disable_submit_tag
Determina si submit_tag
se debe desactivar automáticamente al hacer clic, esto es true
de forma predeterminada.
3.10.10 config.action_view.debug_missing_translation
Determina si se debe envolver la clave de traducción faltante en una etiqueta <span>
o no. Esto es true
de forma predeterminada.
3.10.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
:
A partir de la versión | El valor predeterminado es |
---|---|
5.1 | true |
6.1 | false |
3.10.12 config.action_view.form_with_generates_ids
Determina si form_with
genera ids en los campos de entrada.
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 |
5.2 | true |
3.10.13 config.action_view.default_enforce_utf8
Determina si se generan formularios con una etiqueta oculta que obliga a las versiones antiguas de Internet Explorer a enviar formularios codificados en UTF-8.
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 |
6.0 | false |
3.10.14 config.action_view.image_loading
Especifica un valor predeterminado para el atributo loading
de las etiquetas <img>
generadas por el ayudante image_tag
. Por ejemplo, cuando se establece en "lazy"
, las etiquetas <img>
generadas por image_tag
incluirán loading="lazy"
, lo que indica al navegador que espere hasta que una imagen esté cerca del área visible para cargarla. (Este valor aún se puede anular por imagen pasando, por ejemplo, loading: "eager"
a image_tag
.) El valor predeterminado es nil
.
3.10.15 config.action_view.image_decoding
Especifica un valor predeterminado para el atributo decoding
de las etiquetas <img>
generadas por el ayudante image_tag
. El valor predeterminado es nil
.
3.10.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 se establece en false
por defecto.
3.10.17 config.action_view.preload_links_header
Determina si javascript_include_tag
y stylesheet_link_tag
generarán una cabecera Link
que precargue los activos.
El valor predeterminado depende de la versión objetivo de config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | nil |
6.1 | true |
3.10.18 config.action_view.button_to_generates_button_tag
Determina si button_to
renderizará el elemento <button>
, independientemente de si el contenido se pasa como primer argumento o como un bloque.
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.10.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
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | true |
7.0 | false |
3.10.20 config.action_view.prepend_content_exfiltration_prevention
Determina si los ayudantes form_tag
y button_to
generarán etiquetas HTML con un HTML seguro para el navegador (pero técnicamente inválido) que garantiza que su contenido no pueda ser capturado por ninguna etiqueta sin cerrar previa. El valor predeterminado es false
.
3.10.21 config.action_view.sanitizer_vendor
Configura el conjunto de sanitizadores HTML utilizados por Action View estableciendo ActionView::Helpers::SanitizeHelper.sanitizer_vendor
. 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 utilizará Rails::HTML4::Sanitizer
.
3.11 Configuración de Action Mailbox
config.action_mailbox
proporciona las siguientes opciones de configuración:
3.11.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 de registro predeterminada de Ruby. El valor predeterminado es Rails.logger
.
config.action_mailbox.logger = ActiveSupport::Logger.new(STDOUT)
3.11.2 config.action_mailbox.incinerate_after
Acepta una ActiveSupport::Duration
que indica cuánto tiempo después de procesar los registros de ActionMailbox::InboundEmail
deben ser destruidos. El valor predeterminado es 30.days
.
# Destruir los correos electrónicos entrantes 14 días después de procesarlos.
config.action_mailbox.incinerate_after = 14.days
3.11.3 config.action_mailbox.queues.incineration
Acepta un símbolo que indica la cola de Active Job que se utilizará para los trabajos de incineración. Cuando esta opción es nil
, los trabajos de incineración se envían a la cola de Active Job predeterminada (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 |
---|---|
(original) | :action_mailbox_incineration |
6.1 | nil |
3.11.4 config.action_mailbox.queues.routing
Acepta un símbolo que indica la cola de Active Job que se utilizará para los trabajos de enrutamiento. Cuando esta opción es nil
, los trabajos de enrutamiento se envían a la cola de Active Job predeterminada (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 |
---|---|
(original) | :action_mailbox_routing |
6.1 | nil |
3.11.5 config.action_mailbox.storage_service
Acepta un símbolo que indica el servicio de Active Storage que se utilizará para cargar correos electrónicos. Cuando esta opción es nil
, los correos electrónicos se cargan en el servicio de Active Storage predeterminado (ver config.active_storage.service
).
3.12 Configuración de Action Mailer
Hay varias configuraciones disponibles en config.action_mailer
:
3.12.1 config.action_mailer.asset_host
Establece el host para los activos. Útil cuando se utilizan CDN para alojar activos en lugar del propio servidor de la aplicación. Solo debes usar esto si tienes una configuración diferente para Action Controller, de lo contrario usa config.asset_host
.
3.12.2 config.action_mailer.logger
Acepta un registrador que cumple con la interfaz de Log4r o la clase de registro predeterminada de Ruby, que luego se utiliza para registrar información de Action Mailer. Establecer en nil
para desactivar el registro.
3.12.3 config.action_mailer.smtp_settings
Permite una configuración detallada para el método de entrega :smtp
. Acepta un hash de opciones, que pueden incluir cualquiera de estas opciones:
:address
- Te permite usar un servidor de correo remoto. Simplemente cámbialo desde su configuración predeterminada "localhost".:port
- En caso de que tu servidor de correo no se ejecute en el puerto 25, puedes cambiarlo.:domain
- Si necesitas especificar un dominio HELO, puedes hacerlo aquí.:user_name
- Si tu servidor de correo requiere autenticación, establece el nombre de usuario en esta configuración.:password
- Si tu servidor de correo requiere autenticación, establece la contraseña en esta configuración.:authentication
- Si tu servidor de correo requiere autenticación, debes especificar el tipo de autenticación aquí. Esto es un símbolo y puede ser:plain
,:login
,:cram_md5
.:enable_starttls
- Usa STARTTLS al conectarte a tu servidor SMTP y falla si no es compatible. Por defecto esfalse
.:enable_starttls_auto
- Detecta si STARTTLS está habilitado en tu servidor SMTP y comienza a usarlo. Por defecto estrue
.:openssl_verify_mode
- Cuando se utiliza TLS, puedes establecer cómo OpenSSL verifica el certificado. Esto es útil si necesitas validar un certificado autofirmado y/o un certificado comodín. Puede ser una de las constantes de verificación de OpenSSL,:none
o:peer
-- o la constante directamenteOpenSSL::SSL::VERIFY_NONE
oOpenSSL::SSL::VERIFY_PEER
, respectivamente.:ssl/:tls
- Habilita la conexión SMTP para usar SMTP/TLS (SMTPS: conexión SMTP sobre TLS directa).:open_timeout
- Número de segundos para esperar al intentar abrir una conexión.:read_timeout
- Número de segundos para esperar hasta que se agote el tiempo de espera de una llamada a read(2).
Además, es posible pasar cualquier opción de configuración que respete Mail::SMTP
.
3.12.4 config.action_mailer.smtp_timeout
Permite configurar los valores :open_timeout
y :read_timeout
para el método de entrega :smtp
.
El valor predeterminado depende de la versión objetivo de config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | nil |
7.0 | 5 |
3.12.5 config.action_mailer.sendmail_settings
Permite una configuración detallada para el método de entrega sendmail
. Acepta un hash de opciones, que pueden incluir cualquiera de estas opciones:
:location
- La ubicación del ejecutable de sendmail. Por defecto es/usr/sbin/sendmail
.:arguments
- Los argumentos de la línea de comandos. Por defecto es%w[ -i ]
.
3.12.6 config.action_mailer.raise_delivery_errors
Especifica si se debe generar un error si no se puede completar la entrega del correo electrónico. Por defecto es true
.
3.12.7 config.action_mailer.delivery_method
Define el método de entrega y por defecto es :smtp
. Consulta la sección de configuración en la guía de Action Mailer para obtener más información.
3.12.8 config.action_mailer.perform_deliveries
Especifica si el correo electrónico se entregará realmente y por defecto es true
. Puede ser conveniente establecerlo en false
para pruebas.
3.12.9 config.action_mailer.default_options
Configura las opciones predeterminadas de Action Mailer. Úsalo para establecer opciones como from
o reply_to
para cada mailer. Estas opciones predeterminan a:
mime_version: "1.0",
charset: "UTF-8",
content_type: "text/plain",
parts_order: ["text/plain", "text/enriched", "text/html"]
Asigna un hash para establecer opciones adicionales:
config.action_mailer.default_options = {
from: "[email protected]"
}
3.12.10 config.action_mailer.observers
Registra observadores que serán notificados cuando se entregue el correo.
config.action_mailer.observers = ["MailObserver"]
3.12.11 config.action_mailer.interceptors
Registra interceptores que se llamarán antes de enviar el correo.
config.action_mailer.interceptors = ["MailInterceptor"]
3.12.12 config.action_mailer.preview_interceptors
Registra interceptores que se llamarán antes de previsualizar el correo.
config.action_mailer.preview_interceptors = ["MyPreviewMailInterceptor"]
3.12.13 config.action_mailer.preview_paths
Especifica las ubicaciones de las previsualizaciones de mailer. Agregar rutas a esta opción de configuración hará que se utilicen esas rutas en la búsqueda de previsualizaciones de mailer.
config.action_mailer.preview_paths << "#{Rails.root}/lib/mailer_previews"
3.12.14 config.action_mailer.show_previews
Habilita o deshabilita las previsualizaciones de mailer. Por defecto, esto es true
en desarrollo.
config.action_mailer.show_previews = false
3.12.15 config.action_mailer.perform_caching
Especifica si las plantillas de mailer deben realizar el almacenamiento en caché de fragmentos o no. Si no se especifica, el valor predeterminado será true
.
3.12.16 config.action_mailer.deliver_later_queue_name
Especifica la cola de Active Job que se 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 de Active Job predeterminada (ver config.active_job.default_queue_name
).
Las clases de mailer pueden anular esto para usar una cola diferente. Ten en cuenta que esto solo se aplica cuando se utiliza el trabajo de entrega predeterminado. Si tu mailer utiliza un trabajo personalizado, se utilizará su cola.
Asegúrate de que tu 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
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | :mailers |
6.1 | nil |
3.12.17 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
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | ActionMailer::MailDeliveryJob |
6.0 | "ActionMailer::MailDeliveryJob" |
3.13 Configurando Active Support
Hay algunas opciones de configuración disponibles en Active Support:
3.13.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.13.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.13.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.13.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.13.5 config.active_support.time_precision
Establece la precisión de los valores de tiempo codificados en JSON. Por defecto es 3
.
3.13.6 config.active_support.hash_digest_class
Permite configurar la clase de resumen que se utilizará para generar resúmenes no sensibles, como el encabezado ETag.
El valor predeterminado depende de la versión objetivo de config.load_defaults
:
| A partir de la versión | El valor predeterminado es |
| --------------------- | -------------------- |
| (original) | OpenSSL::Digest::MD5
|
| 5.2 | OpenSSL::Digest::SHA1
|
| 7.0 | OpenSSL::Digest::SHA256
|
3.13.7 config.active_support.key_generator_hash_digest_class
Permite configurar la clase de resumen que se utilizará para derivar secretos de la base de secretos configurada, como para las cookies encriptadas.
El valor predeterminado depende de la versión objetivo de config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | OpenSSL::Digest::SHA1 |
7.0 | OpenSSL::Digest::SHA256 |
3.13.8 config.active_support.use_authenticated_message_encryption
Especifica si se debe utilizar el cifrado de autenticación 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
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | false |
5.2 | true |
3.13.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 fallback para
soportar múltiples formatos de deserialización:
Serializador | Serializar y deserializar | Deserialización de fallback |
---|---|---|
: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 vector potencial 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
la ida y vuelta de algunos tipos de Ruby que no son admitidos por JSON, como Symbol
.
También pueden proporcionar un rendimiento mejorado y tamaños de carga útil más pequeños. Sin embargo,
requieren la gema msgpack
.
Cada uno de los serializadores anteriores emitirá una notificación de evento message_serializer_fallback.active_support
cuando se recurra a un formato de deserialización alternativo,
lo que le permite realizar un seguimiento de la frecuencia con la que ocurren dichos fallbacks.
Alternativamente, puede especificar cualquier objeto serializador que responda a los métodos dump
y
load
. Por ejemplo:
config.active_job.message_serializer = YAML
El valor predeterminado depende de la versión objetivo de config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | :marshal |
7.1 | :json_allow_marshal |
3.13.10 config.active_support.use_message_serializer_for_metadata
Cuando es true
, habilita una optimización de rendimiento que serializa datos de mensajes y
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 se habilita esta optimización o no.
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.13.11 config.active_support.cache_format_version
Especifica qué formato de serialización utilizar para la caché. Los valores posibles son
6.1
, 7.0
y 7.1
.
Los formatos 6.1
, 7.0
y 7.1
utilizan Marshal
como codificador predeterminado, pero
7.0
utiliza una representación más eficiente para las entradas de caché y 7.1
incluye
una optimización adicional para valores de cadena sin formato, 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 se pueden leer cuando se utiliza otro formato. Este comportamiento facilita la migración entre formatos sin invalidar toda la caché.
El valor predeterminado depende de la versión objetivo config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | 6.1 |
7.0 | 7.0 |
7.1 | 7.1 |
3.13.12 config.active_support.deprecation
Configura el comportamiento de las advertencias de deprecación. Las opciones son :raise
, :stderr
, :log
, :notify
y :silence
.
En los archivos config/environments
generados por defecto, esto se establece en :log
para desarrollo y :stderr
para prueba, y se omite para producción a favor de config.active_support.report_deprecations
.
3.13.13 config.active_support.disallowed_deprecation
Configura el comportamiento de las advertencias de deprecación no permitidas. Las opciones son :raise
, :stderr
, :log
, :notify
y :silence
.
En los archivos config/environments
generados por defecto, esto se establece en :raise
tanto para desarrollo como para prueba, y se omite para producción a favor de config.active_support.report_deprecations
.
3.13.14 config.active_support.disallowed_deprecation_warnings
Configura las advertencias de deprecación que la aplicación considera no permitidas. Esto permite, por ejemplo, tratar ciertas deprecaciones como fallas graves.
3.13.15 config.active_support.report_deprecations
Cuando es false
, desactiva todas las advertencias de deprecación, incluidas las deprecaciones no permitidas, de los deprecadores de la aplicación. Esto incluye todas las deprecaciones de Rails y otras gemas que pueden agregar su deprecador a la colección de deprecadores, pero puede que no evite todas las advertencias de deprecación emitidas por ActiveSupport::Deprecation.
En los archivos config/environments
generados por defecto, esto se establece en false
para producción.
3.13.16 config.active_support.isolation_level
Configura la localidad de la mayoría del estado interno de Rails. Si utiliza un servidor o procesador de trabajos basado en fibras (por ejemplo, falcon
), debe establecerlo en :fiber
. De lo contrario, es mejor utilizar la localidad :thread
. El valor predeterminado es :thread
.
3.13.17 config.active_support.executor_around_test_case
Configura el conjunto 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 las pruebas, como la caché de consultas de Active Record y las consultas asíncronas, se habilitarán.
El valor predeterminado depende de la versión objetivo config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | false |
7.0 | true |
3.13.18 ActiveSupport::Logger.silencer
Se establece en false
para desactivar la capacidad de silenciar el registro en un bloque. El valor predeterminado es true
.
3.13.19 ActiveSupport::Cache::Store.logger
Especifica el registro a utilizar en las operaciones de almacenamiento en caché.
3.13.20 ActiveSupport.to_time_preserves_timezone
Especifica si los métodos to_time
conservan el desplazamiento de tiempo UTC de sus receptores. Si es false
, los métodos to_time
convertirán al desplazamiento de tiempo UTC del sistema local en su lugar.
El valor predeterminado depende de la versión objetivo config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | false |
5.0 | true |
3.13.21 ActiveSupport.utc_to_local_returns_utc_offset_times
Configura ActiveSupport::TimeZone.utc_to_local
para devolver una hora con un desplazamiento UTC en lugar de una hora UTC que incorpora ese desplazamiento.
El valor predeterminado depende de la versión objetivo config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | false |
6.1 | true |
3.13.22 config.active_support.raise_on_invalid_cache_expiration_time
Especifica si se debe generar 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 manejada
y se registrará en los registros.
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.14 Configuración de Active Job
config.active_job
proporciona las siguientes opciones de configuración:
3.14.1 config.active_job.queue_adapter
Establece el adaptador para el backend de encolamiento. 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 la gema 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.14.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.14.3 config.active_job.queue_name_prefix
Le permite establecer un prefijo de nombre de cola opcional y no vacío para todos los trabajos. Por defecto, está en blanco y no se utiliza.
La siguiente configuración encolarí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.14.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 la cola sin prefijo.
La siguiente configuración encolaría el trabajo proporcionado en la cola video_server.low_priority
:
# el prefijo debe establecerse para que se utilice 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.14.5 config.active_job.logger
Acepta un registrador que cumple con la interfaz de Log4r o la clase de registro predeterminada de Ruby, que luego se utiliza para registrar información de Active Job. Puede obtener este registrador llamando a logger
en una clase o instancia de Active Job. Establezca en nil
para deshabilitar el registro.
3.14.6 config.active_job.custom_serializers
Permite establecer serializadores de argumentos personalizados. El valor predeterminado es []
.
3.14.7 config.active_job.log_arguments
Controla si se registran los argumentos de un trabajo. El valor predeterminado es true
.
3.14.8 config.active_job.verbose_enqueue_logs
Especifica si se deben registrar las ubicaciones de origen de los métodos que encolan trabajos en segundo plano debajo de las líneas de registro de encolamiento relevantes. De forma predeterminada, la bandera es true
en desarrollo y false
en todos los demás entornos.
3.14.9 config.active_job.retry_jitter
Controla la cantidad de "jitter" (variación aleatoria) aplicada al tiempo de retraso calculado al reintentar trabajos fallidos.
El valor predeterminado depende de la versión objetivo de config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | 0.0 |
6.1 | 0.15 |
3.14.10 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.14.11 config.active_job.use_big_decimal_serializer
Habilita el nuevo serializador de argumentos BigDecimal
, que garantiza la reversibilidad. Sin este serializador, algunos adaptadores de cola pueden serializar los argumentos BigDecimal
como cadenas simples (no reversibles).
ADVERTENCIA: Al implementar una aplicación con múltiples réplicas, las réplicas antiguas (anteriores a Rails 7.1) no podrán deserializar los argumentos BigDecimal
de este serializador. Por lo tanto, esta configuración solo debe habilitarse después de que todas las réplicas se hayan actualizado correctamente a Rails 7.1.
El valor predeterminado depende de la versión objetivo config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | false |
7.1 | true |
3.15 Configuración de Action Cable
3.15.1 config.action_cable.url
Acepta una cadena para la URL donde se encuentra alojado el servidor de Action Cable. Usarías esta opción si estás ejecutando servidores de Action Cable separados de tu aplicación principal.
3.15.2 config.action_cable.mount_path
Acepta una cadena para indicar dónde montar Action Cable como parte del proceso del servidor principal. El valor predeterminado es /cable
. Puedes establecer esto como nil
para no montar Action Cable como parte de tu servidor normal de Rails.
Puedes encontrar más opciones de configuración detalladas en la Descripción general de Action Cable.
3.15.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.16 Configuración de Active Storage
config.active_storage
proporciona las siguientes opciones de configuración:
3.16.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 config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | :mini_magick |
7.0 | :vips |
3.16.2 config.active_storage.analyzers
Acepta una matriz de clases que indican los analizadores disponibles para los blobs de Active Storage. Por defecto, se define 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 velocidad de bits de un blob de audio.
3.16.3 config.active_storage.previewers
Acepta una matriz de clases que indican los previsualizadores de imágenes disponibles en los blobs de Active Storage. Por defecto, se define como:
config.active_storage.previewers = [ActiveStorage::Previewer::PopplerPDFPreviewer, ActiveStorage::Previewer::MuPDFPreviewer, ActiveStorage::Previewer::VideoPreviewer]
PopplerPDFPreviewer
y MuPDFPreviewer
pueden generar una miniatura a partir de la primera página de un blob de PDF; VideoPreviewer
a partir del fotograma relevante de un blob de video.
3.16.4 config.active_storage.paths
Acepta un hash de opciones que indican las ubicaciones de los comandos de previsualización/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.16.5 config.active_storage.variable_content_types
Acepta una matriz de cadenas que indican los tipos de contenido que Active Storage puede transformar a través del procesador de variantes. Por defecto, se define 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.16.6 config.active_storage.web_image_content_types
Acepta una matriz de cadenas consideradas como tipos de contenido de imágenes web en los que se pueden procesar variantes sin convertirlos al formato PNG de respaldo. Si deseas utilizar variantes WebP
o AVIF
en tu aplicación, puedes agregar image/webp
o image/avif
a esta matriz. Por defecto, se define como:
ruby
config.active_storage.web_image_content_types = %w(image/png image/jpeg image/gif)
3.16.7 config.active_storage.content_types_to_serve_as_binary
Acepta un array de strings 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.16.8 config.active_storage.content_types_allowed_inline
Acepta un array de strings 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/png image/gif image/jpeg image/tiff image/vnd.adobe.photoshop image/vnd.microsoft.icon application/pdf)
3.16.9 config.active_storage.queues.analysis
Acepta un símbolo que indica la cola de Active Job que se utilizará para los trabajos de análisis. Cuando esta opción es nil
, los trabajos de análisis se envían a la cola de Active Job predeterminada (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.16.10 config.active_storage.queues.purge
Acepta un símbolo que indica la cola de Active Job que se utilizará para los trabajos de purga. Cuando esta opción es nil
, los trabajos de purga se envían a la cola de Active Job predeterminada (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.16.11 config.active_storage.queues.mirror
Acepta un símbolo que indica la cola de Active Job que se utilizará para los trabajos de espejo de carga directa. Cuando esta opción es nil
, los trabajos de espejo se envían a la cola de Active Job predeterminada (ver config.active_job.default_queue_name
). El valor predeterminado es nil
.
3.16.12 config.active_storage.logger
Se puede utilizar para establecer el registrador utilizado por Active Storage. Acepta un registrador que cumple con la interfaz de Log4r o la clase de registro predeterminada de Ruby.
config.active_storage.logger = ActiveSupport::Logger.new(STDOUT)
3.16.13 config.active_storage.service_urls_expire_in
Determina la expiración predeterminada de las URL generadas por:
ActiveStorage::Blob#url
ActiveStorage::Blob#service_url_for_direct_upload
ActiveStorage::Variant#url
El valor predeterminado es de 5 minutos.
3.16.14 config.active_storage.urls_expire_in
Determina la expiración predeterminada de las URL generadas por Active Storage en la aplicación de Rails. El valor predeterminado es nil
.
3.16.15 config.active_storage.routes_prefix
Se puede utilizar para establecer el prefijo de ruta para las rutas servidas por Active Storage. Acepta una cadena que se agregará al principio de las rutas generadas.
config.active_storage.routes_prefix = '/files'
El valor predeterminado es /rails/active_storage
.
3.16.16 config.active_storage.track_variants
Determina si se registran las variantes 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.16.17 config.active_storage.draw_routes
Se puede utilizar para activar o desactivar la generación de rutas de Active Storage. El valor predeterminado es true
.
3.16.18 config.active_storage.resolve_model_to_route
Se puede utilizar para cambiar globalmente la forma en que se entregan los archivos de Active Storage.
Los valores permitidos son:
:rails_storage_redirect
: Redirigir a URL de servicio firmadas y de corta duración.:rails_storage_proxy
: Proxy de archivos descargándolos.
El valor predeterminado es :rails_storage_redirect
.
3.16.19 config.active_storage.video_preview_arguments
Se puede utilizar 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"
|
3.16.20 config.active_storage.multiple_file_field_include_hidden
En Rails 7.1 en adelante, las relaciones has_many_attached
de Active Storage
por defecto reemplazarán la colección actual en lugar de añadir a ella. Por lo tanto,
para admitir el envío de una colección vacía, cuando multiple_file_field_include_hidden
es true
, el ayudante file_field
renderizará un campo oculto auxiliar, similar al campo auxiliar
renderizado por el ayudante check_box
.
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.16.21 config.active_storage.precompile_assets
Determina si los activos de Active Storage deben agregarse a la precompilación de la canalización de activos. No
tiene efecto si no se utiliza Sprockets. El valor predeterminado es true
.
3.17 Configurando Action Text
3.17.1 config.action_text.attachment_tag_name
Acepta una cadena para la etiqueta HTML utilizada para envolver los adjuntos. El valor predeterminado es "action-text-attachment"
.
3.17.2 config.action_text.sanitizer_vendor
Configura el sanitizador HTML utilizado por Action Text estableciendo ActionText::ContentHelper.sanitizer
en 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 la marca |
---|---|---|
(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 utilizará Rails::HTML4::Sanitizer
.
3.18 Configurando una base de datos
Casi todas las aplicaciones de Rails interactuarán con una base de datos. Puede conectarse a la base de datos configurando una variable de entorno ENV['DATABASE_URL']
o utilizando 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
utilizando el adaptador postgresql
. Esta misma información se puede almacenar 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 de forma predeterminada:
- 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 implementa 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 <%= %>
. Todo lo que esté 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.
CONSEJO: No es necesario actualizar las configuraciones de la base de datos manualmente. 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.19 Preferencia de conexión
Dado que hay dos formas de configurar tu conexión (usando config/database.yml
o usando una variable de entorno), es importante entender cómo pueden interactuar.
Si tienes un archivo config/database.yml
vacío pero tu ENV['DATABASE_URL']
está presente, entonces Rails se conectará a la base de datos a través de tu variable de entorno:
$ cat config/database.yml
$ echo $DATABASE_URL
postgresql://localhost/my_database
Si tienes un archivo config/database.yml
pero no tienes ENV['DATABASE_URL']
, entonces se utilizará este archivo para conectarse a tu base de datos:
$ cat config/database.yml
development:
adapter: postgresql
database: my_database
host: localhost
$ echo $DATABASE_URL
Si tienes tanto config/database.yml
como ENV['DATABASE_URL']
configurados, entonces Rails fusionará la configuración. Para entender esto mejor, debemos ver algunos ejemplos.
Cuando se proporciona información de conexión duplicada, la variable de entorno tiene 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'
#<ActiveRecord::DatabaseConfigurations:0x00007fd50e209a28>
$ bin/rails runner 'puts ActiveRecord::Base.configurations.inspect'
#<ActiveRecord::DatabaseConfigurations:0x00007fc8eab02880 @configurations=[
#<ActiveRecord::DatabaseConfigurations::UrlConfig:0x00007fc8eab020b0
@env_name="development", @spec_name="primary",
@config={"adapter"=>"postgresql", "database"=>"my_database", "host"=>"localhost"}
@url="postgresql://localhost/my_database">
]
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ás todos los valores únicos, la variable de entorno aún tiene prioridad en caso 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'
#<ActiveRecord::DatabaseConfigurations:0x00007fd50e209a28>
$ bin/rails runner 'puts ActiveRecord::Base.configurations.inspect'
#<ActiveRecord::DatabaseConfigurations:0x00007fc8eab02880 @configurations=[
#<ActiveRecord::DatabaseConfigurations::UrlConfig:0x00007fc8eab020b0
@env_name="development", @spec_name="primary",
@config={"adapter"=>"postgresql", "database"=>"my_database", "host"=>"localhost", "pool"=>5}
@url="postgresql://localhost/my_database">
]
Dado que el pool no está en la información de conexión proporcionada por ENV['DATABASE_URL']
, su información se fusiona. Dado que el adaptador es duplicado, la información de conexión de ENV['DATABASE_URL']
tiene prioridad.
La única forma de no utilizar explícitamente la información de conexión en ENV['DATABASE_URL']
es especificar una conexión de 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'
#<ActiveRecord::DatabaseConfigurations:0x00007fd50e209a28>
$ bin/rails runner 'puts ActiveRecord::Base.configurations.inspect'
#<ActiveRecord::DatabaseConfigurations:0x00007fc8eab02880 @configurations=[
#<ActiveRecord::DatabaseConfigurations::UrlConfig:0x00007fc8eab020b0
@env_name="development", @spec_name="primary",
@config={"adapter"=>"sqlite3", "database"=>"NOT_my_database"}
@url="sqlite3:NOT_my_database">
]
Aquí se ignora la información de conexión en ENV['DATABASE_URL']
, nota el adaptador y el nombre de la base de datos diferentes.
Dado que es posible incrustar ERB en tu config/database.yml
, es una buena práctica mostrar explícitamente que estás utilizando ENV['DATABASE_URL']
para conectarte a tu base de datos. Esto es especialmente útil en producción, ya que no debes comprometer secretos como la contraseña de tu base de datos en tu control de código fuente (como Git).
$ cat config/database.yml
production:
url: <%= ENV['DATABASE_URL'] %>
Ahora el comportamiento es claro, solo estamos utilizando la información de conexión en ENV['DATABASE_URL']
.
3.19.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 liviana y sin servidor. Si bien un entorno de producción ocupado puede sobrecargar SQLite, funciona bien para desarrollo y pruebas. Rails utiliza una base de datos SQLite de forma predeterminada al crear un nuevo proyecto, pero siempre puedes 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 de forma predeterminada porque es una base de datos de configuración cero que simplemente funciona. Rails también admite MySQL (incluido MariaDB) y PostgreSQL "listo para usar" y tiene complementos para muchos sistemas de bases de datos. Si estás utilizando una base de datos en un entorno de producción, es muy probable que Rails tenga un adaptador para ella.
3.19.2 Configuración de una base de datos MySQL o MariaDB
Si elige utilizar MySQL o MariaDB en lugar de la base de datos SQLite3 incluida, 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 utilizar el conjunto de caracteres utf8mb4
de forma predeterminada, configure su servidor MySQL para admitir el prefijo de clave más largo habilitando la variable del sistema innodb_large_prefix
.
Las cerraduras de asesoramiento están habilitadas de forma predeterminada en MySQL y se utilizan para hacer que las migraciones de la base de datos sean seguras de forma concurrente. Puede deshabilitar las cerraduras de asesoramiento configurando advisory_locks
en false
:
production:
adapter: mysql2
advisory_locks: false
3.19.3 Configuración de una base de datos PostgreSQL
Si elige utilizar PostgreSQL, su config/database.yml
se personalizará para utilizar bases de datos PostgreSQL:
development:
adapter: postgresql
encoding: unicode
database: blog_development
pool: 5
De forma predeterminada, Active Record utiliza características de la base de datos como declaraciones preparadas y cerraduras de asesoramiento. 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 de forma predeterminada. 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 los límites de memoria, intente reducir statement_limit
o deshabilitar las declaraciones preparadas.
3.19.4 Configuración de una base de datos SQLite3 para la plataforma JRuby
Si elige utilizar 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.19.5 Configuración de una base de datos MySQL o MariaDB para la plataforma JRuby
Si elige utilizar 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.19.6 Configuración de una base de datos PostgreSQL para la plataforma JRuby
Si elige utilizar 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.19.7 Configuración del almacenamiento de metadatos
De forma predeterminada, Rails almacenará información sobre su entorno y esquema de Rails 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.19.8 Configuración del comportamiento de reintento
De forma predeterminada, Rails se reconectará automáticamente al servidor de la base de datos y volverá a intentar ciertas consultas si algo sale mal. Solo se volverán a intentar las consultas seguras para volver a intentar (idempotentes). El número de reintentos se puede especificar en la configuración de la base de datos a través de connection_retries
, o se puede desactivar estableciendo el valor en 0. El número predeterminado de reintentos es 1.
yaml
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 otra manera sería reintentable no se volverá a intentar si ha transcurrido el tiempo especificado mientras la consulta se
intentó por primera vez. Por ejemplo, un retry_deadline
de 5 segundos significa que si han pasado 5 segundos desde que se intentó una consulta
por primera vez, no volveremos a intentar la consulta, incluso si es idempotente y quedan connection_retries
.
Este valor tiene un valor predeterminado de nil, lo que significa que todas las consultas reintentables se vuelven a intentar independientemente del tiempo transcurrido. El valor para esta configuración debe especificarse en segundos.
development:
adapter: mysql2
retry_deadline: 5 # Dejar de reintentar consultas después de 5 segundos
3.19.9 Configuración de la caché de consultas
Por defecto, Rails almacena en caché automáticamente 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 nuevamente en la base de datos.
La caché de consultas se almacena en memoria y, para evitar utilizar demasiada memoria, se eliminan automáticamente las consultas menos utilizadas
cuando se alcanza un umbral. Por defecto, el umbral es 100
, pero se puede configurar en el database.yml
.
development:
adapter: mysql2
query_cache: 200
Para desactivar por completo la caché de consultas, se puede establecer en false
development:
adapter: mysql2
query_cache: false
3.20 Creación de entornos de Rails
Por defecto, Rails se envía con tres entornos: "development", "test" y "production". Si bien estos son suficientes para la mayoría de los casos de uso, hay circunstancias en las que se desean más entornos.
Imaginemos que tenemos un servidor que refleja el entorno de producción pero que solo se utiliza para pruebas. Comúnmente, a este tipo de servidor se le llama "servidor de preparación". Para definir un entorno llamado "preparación" para este servidor, simplemente crea un archivo llamado config/environments/staging.rb
. Dado que este es un entorno similar a producción, se pueden copiar los contenidos de config/environments/production.rb
como punto de partida y realizar los cambios necesarios desde allí. 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 preparación
end
Ese entorno no es diferente de los predeterminados, se puede iniciar un servidor con bin/rails server -e staging
, una consola con bin/rails console -e staging
, Rails.env.staging?
funciona, etc.
3.21 Implementación en un subdirectorio (raíz de URL relativa)
Por defecto, Rails espera que tu aplicación se ejecute en la raíz
(por ejemplo, /
). Esta sección explica cómo ejecutar tu aplicación dentro de un directorio.
Supongamos que queremos implementar nuestra aplicación en "/app1". Rails necesita saber este directorio para generar las rutas apropiadas:
config.relative_url_root = "/app1"
alternativamente, se puede establecer la variable de entorno RAILS_RELATIVE_URL_ROOT
.
Rails ahora agregará "/app1" al generar enlaces.
3.21.1 Usando Passenger
Passenger facilita la ejecución de tu aplicación en un subdirectorio. Puedes encontrar la configuración relevante en el manual de Passenger.
3.21.2 Usando un proxy inverso
Implementar tu aplicación utilizando un proxy inverso tiene ventajas definidas sobre las implementaciones tradicionales. Te permiten tener más control sobre tu servidor al superponer los componentes requeridos por tu aplicación. Muchos servidores web modernos se pueden utilizar como servidores proxy para equilibrar elementos de terceros como servidores de caché o servidores de aplicaciones.
Uno de estos servidores de aplicaciones que se puede utilizar es Unicorn para ejecutarse detrás de un servidor proxy inverso.
En este caso, tendrías que configurar el servidor proxy (NGINX, Apache, etc.) para aceptar conexiones de tu servidor de aplicaciones (Unicorn). Por defecto, Unicorn escuchará conexiones TCP en el puerto 8080, pero puedes cambiar el puerto o configurarlo para que use sockets en su lugar.
Puedes encontrar más información en el readme de Unicorn y entender la filosofía detrás de él.
Una vez que hayas configurado el servidor de aplicaciones, debes redirigir las solicitudes a él configurando adecuadamente tu servidor web. Por ejemplo, tu configuración de NGINX puede incluir lo siguiente:
upstream application_server {
server 0.0.0.0:8080;
}
server {
listen 80;
server_name localhost;
root /ruta/a/tu_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úrate de leer la documentación de NGINX para obtener la información más actualizada.
4 Configuración del entorno de Rails
Algunas partes de Rails también se pueden configurar externamente mediante variables de entorno. Las siguientes variables de entorno son reconocidas por varias partes de Rails:
ENV["RAILS_ENV"]
define el entorno de Rails (producción, desarrollo, prueba, etc.) en el que se ejecutará Rails.ENV["RAILS_RELATIVE_URL_ROOT"]
se utiliza en el código de enrutamiento para reconocer las URL cuando implementas tu aplicación en un subdirectorio.ENV["RAILS_CACHE_ID"]
yENV["RAILS_APP_VERSION"]
se utilizan para generar claves de caché expandidas en el código de caché de Rails. Esto te 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 tu aplicación, Rails procede a cargar los inicializadores. Un inicializador es cualquier archivo Ruby almacenado en config/initializers
en tu aplicación. Puedes utilizar inicializadores para almacenar configuraciones que deben realizarse después de cargar todos los frameworks y gemas, como opciones para configurar estas partes.
Los archivos en config/initializers
(y en cualquier subdirectorio de config/initializers
) se ordenan y se cargan uno por uno como parte del inicializador load_config_initializers
.
Si un inicializador tiene código que depende de otro inicializador, puedes combinarlos en un solo inicializador. Esto hace que las dependencias sean más explícitas y puede ayudar a mostrar nuevos conceptos dentro de tu aplicación. Rails también admite la numeración de los nombres de los archivos de inicialización, pero esto puede generar cambios frecuentes en los nombres de los archivos. No se recomienda cargar explícitamente los inicializadores con require
, ya que esto hará que el inicializador se cargue dos veces.
NOTA: No hay garantía de que tus 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 determinada gema se haya inicializado debe ir en un bloque config.after_initialize
.
6 Eventos de inicialización
Rails tiene 5 eventos de inicialización a los que se puede acceder (enumerados en el orden en que se ejecutan):
before_configuration
: Se ejecuta tan pronto como la constante de la aplicación hereda deRails::Application
. Las llamadas aconfig
se evalúan antes de que esto suceda.before_initialize
: Se ejecuta justo antes de que ocurra el 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 se ejecuten los inicializadores de todas las Railties (incluida la aplicación en sí), pero antes de la carga ansiosa y la construcción de la pila de middleware. Más importante aún, se ejecutará en cada recarga de código endevelopment
, pero solo una vez (durante el inicio) enproduction
ytest
.before_eager_load
: Se ejecuta directamente antes de que ocurra la carga ansiosa, que es el comportamiento predeterminado para el entornoproduction
y no para el entornodevelopment
.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 enconfig/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
# código de inicialización aquí
end
end
end
Alternativamente, también puedes hacerlo a través del método config
en el objeto Rails.application
:
Rails.application.config.before_initialize do
# código de inicialización aquí
end
ADVERTENCIA: Algunas partes de tu aplicación, especialmente el enrutamiento, aún no están configuradas en el punto donde se llama al bloque after_initialize
.
6.1 Rails::Railtie#initializer
Rails tiene varios inicializadores que se ejecutan al iniciar y que 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 se puede especificar para indicar qué inicializador debe ejecutarse antes de este nuevo inicializador, y la clave :after
especificará qué inicializador ejecutar después de este inicializador.
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: Puedes colocar tu inicializador antes o después de cualquier otro inicializador en la cadena, siempre y cuando sea lógico. Digamos que tienes 4 inicializadores llamados "one" a través de "four" (definidos en ese orden) y defines que "four" vaya antes de "two" pero después de "three", eso simplemente no es lógico y Rails no podrá determinar el orden de tus inicializadores.
El argumento de bloque del método initializer
es la instancia de la aplicación en sí, por lo que podemos acceder a la configuración utilizando el método config
como se hace en el ejemplo.
Debido a que Rails::Application
hereda de Rails::Railtie
(indirectamente), puedes usar el método initializer
en config/application.rb
para definir inicializadores para la aplicación.
6.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 para que se pueda definir:load_environment_config
para que se ejecute antes.load_active_support
: Requiereactive_support/dependencies
, que establece la base para Active Support. Opcionalmente requiereactive_support/all
siconfig.active_support.bare
no es verdadero, que es el valor predeterminado.initialize_logger
: Inicializa el registrador (un objetoActiveSupport::Logger
) para la aplicación y lo hace accesible enRails.logger
, siempre que ningún inicializador insertado antes de este punto haya definidoRails.logger
.initialize_cache
: SiRails.cache
aún no está configurado, inicializa la caché haciendo referencia al valor enconfig.cache_store
y guarda el resultado comoRails.cache
. Si este objeto responde al métodomiddleware
, su middleware se inserta antes deRack::Runtime
en la pila de middleware.set_clear_dependencies_hook
: Este inicializador, que se ejecuta solo siconfig.enable_reloading
está configurado comotrue
, utilizaActionDispatch::Callbacks.after
para eliminar las constantes que se han referenciado durante la solicitud del espacio de objetos para que se vuelvan a cargar durante la siguiente solicitud.bootstrap_hook
: Ejecuta todos los bloques configurados enbefore_initialize
.i18n.callbacks
: En el entorno de desarrollo, configura un callbackto_prepare
que llamará aI18n.reload!
si alguna de las configuraciones regionales 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 obsolescencia paraRails.application.deprecators
basado enconfig.active_support.report_deprecations
,config.active_support.deprecation
,config.active_support.disallowed_deprecation
yconfig.active_support.disallowed_deprecation_warnings
.active_support.initialize_time_zone
: Establece la zona horaria predeterminada para la aplicación en función de la configuraciónconfig.time_zone
, que es "UTC" de forma predeterminada.active_support.initialize_beginning_of_week
: Establece el comienzo de la semana predeterminado para la aplicación en función de la configuraciónconfig.beginning_of_week
, que es:monday
de forma predeterminada.active_support.set_configs
: Configura Active Support utilizando las configuraciones enconfig.active_support
enviando los nombres de los métodos como setters aActiveSupport
y pasando los valores correspondientes.action_dispatch.configure
: ConfiguraActionDispatch::Http::URL.tld_length
para que tenga el valor deconfig.action_dispatch.tld_length
.action_view.set_configs
: Configura Action View utilizando las configuraciones enconfig.action_view
enviando los nombres de los métodos como setters aActionView::Base
y pasando los valores correspondientes.action_controller.assets_config
: Inicializaconfig.action_controller.assets_dir
en el directorio público de la aplicación si no está configurado explícitamente.action_controller.set_helpers_path
: Establecehelpers_path
de Action Controller en elhelpers_path
de la aplicación.action_controller.parameters_config
: Configura las opciones de strong parameters paraActionController::Parameters
.action_controller.set_configs
: Configura Action Controller utilizando las configuraciones enconfig.action_controller
enviando los nombres de los métodos como setters aActionController::Base
y pasando los valores correspondientes.action_controller.compile_config_methods
: Inicializa los métodos para las configuraciones especificadas para que sean más rápidos de acceder.active_record.initialize_timezone
: EstableceActiveRecord::Base.time_zone_aware_attributes
entrue
, y también estableceActiveRecord::Base.default_timezone
en UTC. Cuando se leen los atributos de la base de datos, se convertirán a la zona horaria especificada porTime.zone
.active_record.logger
: EstableceActiveRecord::Base.logger
- si aún no está configurado - enRails.logger
.active_record.migration_error
: Configura el middleware para verificar las 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 las advertencias cuando las consultas devuelven grandes cantidades de registros.active_record.set_configs
: Configura Active Record utilizando las configuraciones enconfig.active_record
enviando los nombres de los métodos como setters aActiveRecord::Base
y pasando los valores correspondientes.active_record.initialize_database
: Carga la configuración de la base de datos (por defecto) desdeconfig/database.yml
y establece una conexión para el entorno actual.active_record.log_runtime
: IncluyeActiveRecord::Railties::ControllerRuntime
yActiveRecord::Railties::JobRuntime
, que son responsables de informar al registrador sobre el tiempo que llevan las llamadas de Active Record para la solicitud.active_record.set_reloader_hooks
: Restablece todas las conexiones recargables a la base de datos siconfig.enable_reloading
está configurado comotrue
.active_record.add_watchable_files
: Agrega los archivosschema.rb
ystructure.sql
a los archivos observables.active_job.logger
: EstableceActiveJob::Base.logger
- si aún no está configurado - enRails.logger
.active_job.set_configs
: Configura Active Job utilizando los ajustes enconfig.active_job
enviando los nombres de los métodos como setters aActiveJob::Base
y pasando los valores correspondientes.action_mailer.logger
: ConfiguraActionMailer::Base.logger
- si aún no está configurado - aRails.logger
.action_mailer.set_configs
: Configura Action Mailer utilizando los ajustes enconfig.action_mailer
enviando los nombres de los métodos como setters aActionMailer::Base
y pasando los valores correspondientes.action_mailer.compile_config_methods
: Inicializa los métodos para las configuraciones especificadas para que sean más rápidos de acceder.set_load_path
: Este inicializador se ejecuta antes debootstrap_hook
. Agrega las rutas especificadas enconfig.load_paths
y todas las rutas de carga automática a$LOAD_PATH
.set_autoload_paths
: Este inicializador se ejecuta antes debootstrap_hook
. Agrega todos los subdirectorios deapp
y las rutas especificadas enconfig.autoload_paths
,config.eager_load_paths
yconfig.autoload_once_paths
aActiveSupport::Dependencies.autoload_paths
.add_routing_paths
: Carga (por defecto) todos los archivosconfig/routes.rb
(en la aplicación y en los railties, incluyendo los motores) y configura las rutas para la aplicación.add_locales
: Agrega los archivos enconfig/locales
(de la aplicación, los railties y los motores) aI18n.load_path
, haciendo disponibles las traducciones en estos archivos.add_view_paths
: Agrega el directorioapp/views
de la aplicación, los railties y los motores a la ruta de búsqueda de archivos de vista para la aplicación.add_mailer_preview_paths
: Agrega el directoriotest/mailers/previews
de la aplicación, los railties y los motores a la ruta de búsqueda de archivos de vista previa de correos para la aplicación.load_environment_config
: Este inicializador se ejecuta antes deload_environment_hook
. Carga el archivoconfig/environments
correspondiente al entorno actual.prepend_helpers_path
: Agrega el directorioapp/helpers
de la aplicación, los railties y los motores a la ruta de búsqueda de helpers para la aplicación.load_config_initializers
: Carga todos los archivos Ruby deconfig/initializers
en la aplicación, los railties y los motores. Los archivos en este directorio se pueden utilizar para almacenar configuraciones que deben realizarse después de que se carguen todos los frameworks.engines_blank_point
: Proporciona un punto de inicialización para conectarse si se 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 las plantillas para los generadores enlib/templates
de la aplicación, los railties y los motores, y las agrega a la configuraciónconfig.generators.templates
, lo que permitirá que las plantillas estén disponibles para todos los generadores.ensure_autoload_once_paths_as_subset
: Asegura queconfig.autoload_once_paths
solo contenga rutas deconfig.autoload_paths
. Si contiene rutas adicionales, se generará una excepción.add_to_prepare_blocks
: Agrega el bloque para cada llamada aconfig.to_prepare
en la aplicación, un railtie o un motor a los callbacksto_prepare
de 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 pararails/info/properties
a las rutas de la aplicación. Esta ruta proporciona información detallada como la versión de Rails y Ruby parapublic/index.html
en una aplicación Rails por defecto.build_middleware_stack
: Construye la pila de middleware para la aplicación, devolviendo un objeto que tiene un métodocall
que recibe un objeto de entorno Rack para la solicitud.eager_load!
: Siconfig.eager_load
estrue
, ejecuta los hooksconfig.before_eager_load
y luego llama aeager_load!
, que cargará todos losconfig.eager_load_namespaces
.finisher_hook
: Proporciona un hook después de que se haya completado el proceso de inicialización de la aplicación, así como ejecutar todos los bloquesconfig.after_initialize
de la aplicación, los railties y los motores.set_routes_reloader_hook
: Configura Action Dispatch para recargar el archivo de rutas utilizandoActiveSupport::Callbacks.to_run
.disable_dependency_loading
: Desactiva la carga automática de dependencias siconfig.eager_load
está configurado comotrue
.
7 Agrupación de la base de datos
Las conexiones de base de datos de Active Record son gestionadas por ActiveRecord::ConnectionAdapters::ConnectionPool
, que garantiza que un grupo de conexiones de base de datos limite la cantidad de acceso de hilos. Este límite tiene un valor predeterminado de 5 y se puede configurar 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 de forma predeterminada, todos los servidores de aplicaciones (Thin, Puma, Unicorn, etc.) deberían comportarse de la misma manera. El grupo de conexiones de base de datos está inicialmente vacío. A medida que aumenta la demanda de conexiones, se crearán nuevas conexiones hasta alcanzar el límite del grupo de conexiones.
Cada solicitud tomará una conexión la primera vez que requiera acceso a la base de datos. Al final de la solicitud, devolverá la conexión. Esto significa que la ranura de conexión adicional estará disponible nuevamente para la siguiente solicitud en la cola.
Si intentas utilizar más conexiones de las disponibles, Active Record te bloqueará y esperará una conexión del grupo. Si no puede obtener una conexión, se lanzará un error de tiempo de espera similar al siguiente:
ActiveRecord::ConnectionTimeoutError - no se pudo obtener una conexión de base de datos en 5.000 segundos (esperó 5.000 segundos)
Si obtienes el error anterior, es posible que desees aumentar el tamaño del grupo de conexiones incrementando la opción pool
en database.yml
.
NOTA. Si estás ejecutando en un entorno multihilo, puede haber varias posibilidades de que varios hilos accedan a múltiples conexiones simultáneamente. Por lo tanto, dependiendo de la carga actual de solicitudes, es posible que varios hilos compitan por un número limitado de conexiones.
8 Configuración personalizada
Puedes configurar tu propio código a través del objeto de configuración de Rails con configuraciones personalizadas en el espacio de nombres config.x
o directamente en config
. La diferencia clave entre estos dos es que debes usar config.x
si estás definiendo una configuración anidada (por ejemplo, config.x.nested.hi
) y solo config
para una configuración de un solo nivel (por ejemplo, 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 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 puedes 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á con 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 }
9 Indexación de motores de búsqueda
A veces, es posible que desees evitar que algunas páginas de tu 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://tu-sitio.com/robots.txt
para saber qué páginas se les permite indexar.
Rails crea este archivo para ti dentro de la carpeta /public
. Por defecto, permite que los motores de búsqueda indexen todas las páginas de tu aplicación. Si quieres bloquear la indexación en todas las páginas de tu aplicación, utiliza esto:
User-agent: *
Disallow: /
Para bloquear solo páginas específicas, es necesario utilizar una sintaxis más compleja. Aprende más en la documentación oficial.
10 Monitor de sistema de archivos con eventos
Si se carga la gema listen, Rails utiliza un monitor de sistema de archivos con eventos para detectar cambios cuando la recarga está habilitada:
group :development do
gem 'listen', '~> 3.3'
end
De lo contrario, en cada solicitud, Rails recorre 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.
Ten 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 encuentras algún error tipográfico o factual. Para empezar, puedes leer nuestra contribución a la documentación sección.
También puedes encontrar contenido incompleto o desactualizado. Por favor, añade cualquier documentación faltante para main. Asegúrate de revisar Edge Guides primero para verificar si los problemas ya están resueltos o no en la rama principal. Consulta las Directrices de las Guías de Ruby on Rails para el estilo y las convenciones.
Si por alguna razón encuentras algo que corregir pero no puedes solucionarlo tú mismo, por favor abre un problema.
Y por último, cualquier tipo de discusión sobre la documentación de Ruby on Rails es muy bienvenida en el Foro oficial de Ruby on Rails.