1 Ubicaciones para el Código de Inicialización
Rails ofrece cuatro lugares estándar para ubicar el código de inicialización:
config/application.rb
- Archivos de configuración específicos del entorno
- Inicializadores
- Después de los inicializadores
2 Ejecutando Código Antes de Rails
En el raro caso de que su aplicación necesite ejecutar algún código antes de que Rails se cargue, colóquelo encima de la llamada a require "rails/all"
en config/application.rb
.
3 Configuración de Componentes de Rails
En general, el trabajo de configurar Rails significa configurar los componentes de Rails, así como configurar Rails en sí mismo. El archivo de configuración config/application.rb
y los archivos de configuración específicos del entorno (como config/environments/production.rb
) le permiten especificar las diversas configuraciones que desea pasar a todos los componentes.
Por ejemplo, podría agregar esta configuración al archivo config/application.rb
:
config.time_zone = 'Central Time (US & Canada)'
Esta es una configuración para Rails en sí. Si desea pasar configuraciones a componentes individuales de Rails, puede hacerlo a través del mismo objeto config
en config/application.rb
:
config.active_record.schema_format = :ruby
Rails usará esa configuración particular para configurar Active Record.
ADVERTENCIA: Use los métodos de configuración pública en lugar de llamar directamente a la clase asociada. Por ejemplo, Rails.application.config.action_mailer.options
en lugar de ActionMailer::Base.options
.
NOTA: Si necesita aplicar configuración directamente a una clase, use un hook de carga diferida en un inicializador para evitar la carga automática de la clase antes de que se complete la inicialización. Esto fallará porque la carga automática durante la inicialización no puede repetirse de manera segura cuando la aplicación se recarga.
3.1 Valores por Defecto Versionados
config.load_defaults
carga valores de configuración predeterminados para una versión objetivo y todas las versiones anteriores. Por ejemplo, config.load_defaults 6.1
cargará los valores predeterminados para todas las versiones hasta e incluyendo la versión 6.1.
A continuación se muestran los valores predeterminados asociados con cada versión objetivo. En casos de valores conflictivos, las versiones más nuevas tienen prioridad sobre las más antiguas.
3.1.1 Valores por Defecto para la Versión Objetivo 7.2
config.active_job.enqueue_after_transaction_commit
::default
config.active_record.postgresql_adapter_decode_dates
:true
config.active_record.validate_migration_timestamps
:true
config.active_storage.web_image_content_types
:%w[image/png image/jpeg image/gif image/webp]
config.yjit
:true
3.1.2 Valores por Defecto para la Versión Objetivo 7.1
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_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.generate_secure_token_on
::initialize
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.dom_testing_default_html_version
:defined?(Nokogiri::HTML5) ? :html5 : :html4
config.log_file_size
:100 * 1024 * 1024
config.precompile_filter_parameters
:true
3.1.3 Valores por Defecto 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.key_generator_hash_digest_class
:OpenSSL::Digest::SHA256
3.1.4 Valores por Defecto para la Versión Objetivo 6.1
ActiveSupport.utc_to_local_returns_utc_offset_times
:true
config.action_dispatch.cookies_same_site_protection
::lax
config.action_dispatch.ssl_default_redirect_status
:308
config.action_mailbox.queues.incineration
:nil
config.action_mailbox.queues.routing
:nil
config.action_mailer.deliver_later_queue_name
:nil
config.action_view.form_with_generates_remote_forms
:false
config.action_view.preload_links_header
:true
config.active_job.retry_jitter
:0.15
config.active_record.has_many_inversing
:true
config.active_storage.queues.analysis
:nil
config.active_storage.queues.purge
:nil
config.active_storage.track_variants
:true
3.1.5 Valores por Defecto 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.6 Valores por Defecto 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.7 Valores por Defecto para la Versión Objetivo 5.1
config.action_view.form_with_generates_remote_forms
:true
config.assets.unknown_asset_fallback
:false
3.1.8 Valores por Defecto 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 de verificar estos directorios al resolver llamadas require
con rutas relativas, y ahorra trabajo y RAM a Bootsnap, ya que no necesita construir un índice para ellos.
El valor predeterminado depende de la versión objetivo de config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | true |
7.1 | false |
El directorio lib
no se ve afectado por este indicador, siempre se agrega a $LOAD_PATH
.
3.2.2 config.after_initialize
Toma un bloque que se ejecutará después de que Rails haya terminado de inicializar la aplicación. Eso incluye la inicialización del propio framework, motores y todos los inicializadores de la aplicación en config/initializers
. Tenga en cuenta que este bloque se ejecutará para tareas rake. Útil para configurar valores establecidos por otros inicializadores:
config.after_initialize do
ActionView::Base.sanitized_allowed_tags.delete 'div'
end
3.2.3 config.after_routes_loaded
Toma un bloque que se ejecutará después de que Rails haya terminado de cargar las rutas de la aplicación. Este bloque también se ejecutará cada vez que se recarguen las rutas.
config.after_routes_loaded do
# Código que hace algo con Rails.application.routes
end
3.2.4 config.allow_concurrency
Controla si las solicitudes deben manejarse de manera concurrente. Esto solo debe establecerse en false
si el código de la aplicación no es seguro para hilos. Por defecto es true
.
3.2.5 config.asset_host
Establece el host para los activos. Útil cuando se utilizan CDNs para alojar activos, o cuando se desea trabajar alrededor de las restricciones de concurrencia incorporadas en los navegadores utilizando diferentes alias de dominio. Versión más corta de config.action_controller.asset_host
.
3.2.6 config.assume_ssl
Hace que la aplicación crea que todas las solicitudes están llegando a través de SSL. Esto es útil cuando se pasa a través de un equilibrador de carga que termina SSL, la solicitud reenviada parecerá ser HTTP en lugar de HTTPS para la aplicación. Esto hace que los redireccionamientos y la seguridad de las cookies apunten a HTTP en lugar de HTTPS. Este middleware hace que el servidor asuma que el proxy ya ha terminado SSL, y que la solicitud realmente es HTTPS.
3.2.7 config.autoflush_log
Habilita la escritura de salida del archivo de registro inmediatamente en lugar de almacenarla en búfer. Por defecto es true
.
3.2.8 config.autoload_lib(ignore:)
Este método agrega lib
a config.autoload_paths
y config.eager_load_paths
.
Normalmente, el directorio lib
tiene subdirectorios que no deben cargarse automáticamente ni cargarse de manera ansiosa. Por favor, pase su nombre relativo a lib
en el argumento requerido ignore
. Por ejemplo,
config.autoload_lib(ignore: %w(assets tasks generators))
Por favor, vea más detalles en la guía de carga automática.
3.2.9 config.autoload_lib_once(ignore:)
El método config.autoload_lib_once
es similar a config.autoload_lib
, excepto que agrega lib
a config.autoload_once_paths
en su lugar.
Al llamar a config.autoload_lib_once
, las clases y módulos en lib
pueden cargarse automáticamente, incluso desde inicializadores de la aplicación, pero no se recargarán.
3.2.10 config.autoload_once_paths
Acepta un array de rutas desde las cuales Rails cargará automáticamente constantes que no se borrarán por solicitud. Relevante si la recarga está habilitada, lo cual está por defecto en el entorno development
. De lo contrario, toda la carga automática ocurre solo una vez. Todos los elementos de este array también deben estar en autoload_paths
. Por defecto es un array vacío.
3.2.11 config.autoload_paths
Acepta un array de rutas desde las cuales Rails cargará automáticamente constantes. Por defecto es un array vacío. Desde Rails 6, no se recomienda ajustar esto. Vea Carga Automática y Recarga de Constantes.
3.2.12 config.beginning_of_week
Establece el inicio de semana predeterminado para la aplicación. Acepta un día válido de la semana como símbolo (por ejemplo, :monday
).
3.2.13 config.cache_classes
Configuración antigua equivalente a !config.enable_reloading
. Admitido por compatibilidad con versiones anteriores.
3.2.14 config.cache_store
Configura qué tienda de caché usar para el almacenamiento en caché de Rails. Las opciones incluyen uno de los símbolos :memory_store
, :file_store
, :mem_cache_store
, :null_store
, :redis_cache_store
, o un objeto que implemente la API de caché. Por defecto es :file_store
. Vea Tiendas de Caché para opciones de configuración por tienda.
3.2.15 config.colorize_logging
Especifica si usar o no códigos de color ANSI al registrar información. Por defecto es true
.
3.2.16 config.consider_all_requests_local
Es un indicador. Si es true
, entonces cualquier error causará que se vuelque información detallada de depuración en la respuesta HTTP, y el controlador Rails::Info
mostrará el contexto de tiempo de ejecución de la aplicación en /rails/info/properties
. true
por defecto en los entornos de desarrollo y prueba, y false
en producción. Para un control más fino, establezca esto en false
e implemente show_detailed_exceptions?
en los controladores para especificar qué solicitudes deben proporcionar información de depuración sobre errores.
3.2.17 config.console
Le permite establecer la clase que se usará como consola cuando ejecute bin/rails console
. Es mejor ejecutarlo en el bloque console
:
console do
# este bloque se llama solo cuando se ejecuta la consola,
# por lo que podemos requerir pry aquí de manera segura
require "pry"
config.console = Pry
end
3.2.18 config.content_security_policy_nonce_directives
Vea Agregando un Nonce en la Guía de Seguridad
3.2.19 config.content_security_policy_nonce_generator
Vea Agregando un Nonce en la Guía de Seguridad
3.2.20 config.content_security_policy_report_only
Vea Informando Violaciones en la Guía de Seguridad
3.2.21 config.credentials.content_path
La ruta del archivo de credenciales encriptado.
Por defecto es config/credentials/#{Rails.env}.yml.enc
si existe, o
config/credentials.yml.enc
de lo contrario.
NOTA: Para que los comandos bin/rails credentials
reconozcan este valor,
debe establecerse en config/application.rb
o config/environments/#{Rails.env}.rb
.
3.2.22 config.credentials.key_path
La ruta del archivo de clave de credenciales encriptadas.
Por defecto es config/credentials/#{Rails.env}.key
si existe, o
config/master.key
de lo contrario.
NOTA: Para que los comandos bin/rails credentials
reconozcan este valor,
debe establecerse en config/application.rb
o config/environments/#{Rails.env}.rb
.
3.2.23 config.debug_exception_response_format
Establece el formato utilizado en las respuestas cuando ocurren errores en el entorno de desarrollo. Por defecto es :api
para aplicaciones solo API y :default
para aplicaciones normales.
3.2.24 config.disable_sandbox
Controla si alguien puede iniciar una consola en modo sandbox. Esto es útil para evitar una sesión prolongada de consola sandbox, que podría llevar a que un servidor de base de datos se quede sin memoria. Por defecto es false
.
3.2.25 config.dom_testing_default_html_version
Controla si un analizador HTML4 o un analizador HTML5 se usa por defecto por los ayudantes de prueba en Action View, Action Dispatch y rails-dom-testing
.
El valor predeterminado depende de la versión objetivo de config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | :html4 |
7.1 | :html5 (ver NOTA) |
NOTA: El analizador HTML5 de Nokogiri no es compatible con JRuby, por lo que en plataformas JRuby Rails volverá a :html4
.
3.2.26 config.eager_load
Cuando es true
, carga ansiosamente todos los espacios de nombres registrados en config.eager_load_namespaces
. Esto incluye su aplicación, motores, frameworks de Rails y cualquier otro espacio de nombres registrado.
3.2.27 config.eager_load_namespaces
Registra espacios de nombres que se cargan ansiosamente cuando config.eager_load
está establecido en true
. Todos los espacios de nombres en la lista deben responder al método eager_load!
.
3.2.28 config.eager_load_paths
Acepta un array de rutas desde las cuales Rails cargará ansiosamente al iniciar si config.eager_load
es verdadero. Por defecto es cada carpeta en el directorio app
de la aplicación.
3.2.29 config.enable_reloading
Si config.enable_reloading
es verdadero, las clases y módulos de la aplicación se recargan entre solicitudes web si cambian. Por defecto es true
en el entorno development
, y false
en el entorno production
.
También se define el predicado config.reloading_enabled?
.
3.2.30 config.encoding
Configura la codificación a nivel de aplicación. Por defecto es UTF-8.
3.2.31 config.exceptions_app
Establece la aplicación de excepciones invocada por el middleware ShowException
cuando ocurre una excepción.
Por defecto es ActionDispatch::PublicExceptions.new(Rails.public_path)
.
Las aplicaciones de excepciones necesitan manejar errores ActionDispatch::Http::MimeNegotiation::InvalidType
, que se lanzan cuando un cliente envía un encabezado Accept
o Content-Type
no válido.
La aplicación ActionDispatch::PublicExceptions
por defecto hace esto automáticamente, estableciendo Content-Type
a text/html
y devolviendo un estado 406 Not Acceptable
.
No manejar este error resultará en un 500 Internal Server Error
.
Usar el Rails.application.routes
RouteSet
como la aplicación de excepciones también requiere este manejo especial.
Podría verse algo así:
# config/application.rb
config.exceptions_app = CustomExceptionsAppWrapper.new(exceptions_app: routes)
# lib/custom_exceptions_app_wrapper.rb
class CustomExceptionsAppWrapper
def initialize(exceptions_app:)
@exceptions_app = exceptions_app
end
def call(env)
request = ActionDispatch::Request.new(env)
fallback_to_html_format_if_invalid_mime_type(request)
@exceptions_app.call(env)
end
private
def fallback_to_html_format_if_invalid_mime_type(request)
request.formats
rescue ActionDispatch::Http::MimeNegotiation::InvalidType
request.set_header "CONTENT_TYPE", "text/html"
end
end
3.2.32 config.file_watcher
Es la clase utilizada para detectar actualizaciones de archivos en el sistema de archivos cuando config.reload_classes_only_on_change
es true
. Rails se envía con ActiveSupport::FileUpdateChecker
, el predeterminado, y ActiveSupport::EventedFileUpdateChecker
(este depende de la gema listen). Las clases personalizadas deben ajustarse a la API de ActiveSupport::FileUpdateChecker
.
3.2.33 config.filter_parameters
Utilizado para filtrar los parámetros que no desea que se muestren en los registros,
como contraseñas o números de tarjetas de crédito. También filtra valores sensibles
de columnas de base de datos al llamar a #inspect
en un objeto Active Record. Por
defecto, Rails filtra las contraseñas agregando los siguientes filtros en
config/initializers/filter_parameter_logging.rb
.
Rails.application.config.filter_parameters += [
:passw, :email, :secret, :token, :_key, :crypt, :salt, :certificate, :otp, :ssn
]
El filtro de parámetros funciona mediante coincidencia parcial de expresión regular.
3.2.34 config.filter_redirect
Utilizado para filtrar urls de redirección de los registros de la aplicación.
Rails.application.config.filter_redirect += ['s3.amazonaws.com', /private-match/]
El filtro de redirección funciona probando que las urls incluyan cadenas o coincidan con expresiones regulares.
3.2.35 config.force_ssl
Fuerza que todas las solicitudes se sirvan a través de HTTPS y establece "https://" como el protocolo predeterminado al generar URLs. La aplicación de HTTPS se maneja mediante el middleware ActionDispatch::SSL
, que puede configurarse a través de config.ssl_options
.
3.2.36 config.helpers_paths
Define un array de rutas adicionales para cargar ayudantes de vista.
3.2.37 config.host_authorization
Acepta un hash de opciones para configurar el middleware de Autorización de Host
3.2.38 config.hosts
Un array de cadenas, expresiones regulares o IPAddr
utilizado para validar el
encabezado Host
. Utilizado por el middleware de Autorización de Host para ayudar a prevenir ataques de reencaminamiento de DNS.
3.2.39 config.javascript_path
Establece la ruta donde vive el JavaScript de su aplicación en relación con el directorio app
y el valor predeterminado es javascript
.
La javascript_path
configurada de una aplicación se excluirá de autoload_paths
.
3.2.40 config.log_file_size
Define el tamaño máximo del archivo de registro de Rails en bytes. Por defecto es 104_857_600
(100 MiB) en desarrollo y prueba, e ilimitado en todos los demás entornos.
3.2.41 config.log_formatter
Define el formateador del registrador de Rails. Esta opción por defecto es una instancia de ActiveSupport::Logger::SimpleFormatter
para todos los entornos. Si está estableciendo un valor para config.logger
, debe pasar manualmente el valor de su formateador a su registrador antes de que sea envuelto en una instancia de ActiveSupport::TaggedLogging
, Rails no lo hará por usted.
3.2.42 config.log_level
Define la verbosidad del registrador de Rails. Esta opción por defecto es :debug
para todos los entornos excepto producción, donde por defecto es :info
. Los niveles de registro disponibles son: :debug
, :info
, :warn
, :error
, :fatal
y :unknown
.
3.2.43 config.log_tags
Acepta una lista de métodos a los que el objeto request
responde, un Proc
que acepta el objeto request
, o algo que responde a to_s
. Esto facilita etiquetar líneas de registro con información de depuración como subdominio e id de solicitud, ambos muy útiles para depurar aplicaciones de producción multiusuario.
3.2.44 config.logger
Es el registrador que se usará para Rails.logger
y cualquier registro relacionado con Rails como ActiveRecord::Base.logger
. Por defecto es una instancia de ActiveSupport::TaggedLogging
que envuelve una instancia de ActiveSupport::Logger
que genera un registro en el directorio log/
. Puede proporcionar un registrador personalizado, para obtener compatibilidad completa debe seguir estas pautas:
- Para admitir un formateador, debe asignar manualmente un formateador del valor
config.log_formatter
al registrador. - Para admitir registros etiquetados, la instancia de registro debe estar envuelta con
ActiveSupport::TaggedLogging
. - Para admitir silenciamiento, el registrador debe incluir el módulo
ActiveSupport::LoggerSilence
. La 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.45 config.middleware
Le permite configurar el middleware de la aplicación. Esto se cubre en profundidad en la sección Configuración de Middleware a continuación.
3.2.46 config.precompile_filter_parameters
Cuando es true
, precompilará config.filter_parameters
usando ActiveSupport::ParameterFilter.precompile_filters
.
El valor predeterminado depende de la versión objetivo de config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | false |
7.1 | true |
3.2.47 config.public_file_server.enabled
Configura si Rails debe servir archivos estáticos desde el directorio público.
Por defecto es true
.
Si el software del servidor (por ejemplo, NGINX o Apache) debe servir archivos estáticos en su lugar,
establezca este valor en false
.
3.2.48 config.railties_order
Permite especificar manualmente el orden en que se cargan Railties/Engines. El
valor predeterminado es [:all]
.
config.railties_order = [Blog::Engine, :main_app, :all]
3.2.49 config.rake_eager_load
Cuando es true
, carga ansiosamente la aplicación al ejecutar tareas Rake. Por defecto es false
.
3.2.50 config.read_encrypted_secrets
DESAPROBADO: Debería estar usando credenciales en lugar de secretos encriptados.
Cuando es true
, intentará leer secretos encriptados desde config/secrets.yml.enc
3.2.51 config.relative_url_root
Puede usarse para decirle a Rails que está desplegando en un subdirectorio. El valor por defecto
es ENV['RAILS_RELATIVE_URL_ROOT']
.
3.2.52 config.reload_classes_only_on_change
Habilita o deshabilita la recarga de clases solo cuando cambian los archivos rastreados. Por defecto rastrea todo en rutas de carga automática y está establecido en true
. Si config.enable_reloading
es false
, esta opción se ignora.
3.2.53 config.require_master_key
Hace que la aplicación no se inicie si no se ha puesto a disposición una clave maestra a través de ENV["RAILS_MASTER_KEY"]
o el archivo config/master.key
.
3.2.54 config.sandbox_by_default
Cuando es true
, la consola de rails comienza en modo sandbox. Para iniciar la consola de rails en modo no sandbox, debe especificarse --no-sandbox
. Esto es útil para evitar escrituras accidentales en la base de datos de producción. Por defecto es false
.
3.2.55 config.secret_key_base
El respaldo para especificar la clave de entrada para el generador de claves de una aplicación.
Se recomienda dejar esto sin establecer y, en su lugar, especificar un secret_key_base
en config/credentials.yml.enc
. Vea la documentación de la API de secret_key_base
para más información y métodos de configuración alternativos.
3.2.56 config.server_timing
Cuando es true
, agrega el middleware ServerTiming
a la pila de middleware. Por defecto es false
, pero está establecido en true
en el
archivo config/environments/development.rb
generado por defecto.
3.2.57 config.session_options
Opciones adicionales pasadas a config.session_store
. Debe usar
config.session_store
para establecer esto en lugar de modificarlo usted mismo.
config.session_store :cookie_store, key: "_your_app_session"
config.session_options # => {key: "_your_app_session"}
3.2.58 config.session_store
Especifica qué clase usar para almacenar la sesión. Los valores posibles son :cache_store
, :cookie_store
, :mem_cache_store
, un almacén personalizado, o :disabled
. :disabled
indica a Rails que no se ocupe de las sesiones.
Esta configuración se configura mediante una llamada de método regular, en lugar de un setter. Esto permite pasar opciones adicionales:
config.session_store :cookie_store, key: "_your_app_session"
Si se especifica un almacén personalizado como símbolo, se resolverá en el espacio de nombres ActionDispatch::Session
:
# usa ActionDispatch::Session::MyCustomStore como el almacén de sesión
config.session_store :my_custom_store
El almacén predeterminado es un almacén de cookies con el nombre de la aplicación como clave de sesión.
3.2.59 config.ssl_options
Opciones de configuración para el middleware ActionDispatch::SSL
.
El valor predeterminado depende de la versión objetivo de config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | {} |
5.0 | { hsts: { subdomains: true } } |
3.2.60 config.time_zone
Establece la zona horaria predeterminada para la aplicación y habilita la conciencia de zona horaria para Active Record.
3.2.61 config.x
Utilizado para agregar fácilmente configuración personalizada anidada al objeto de configuración de la aplicación
config.x.payment_processing.schedule = :daily
Rails.configuration.x.payment_processing.schedule # => :daily
Vea Configuración Personalizada
3.2.62 config.yjit
Habilita YJIT a partir de Ruby 3.3, para ofrecer mejoras de rendimiento considerables. Si está
desplegando en un entorno con restricciones de memoria, es posible que desee establecer esto en false
.
A partir de la versión | El valor predeterminado es |
---|---|
(original) | false |
7.2 | true |
3.3 Configuración de Activos
3.3.1 config.assets.css_compressor
Define el compresor CSS a usar. Está configurado por defecto por sass-rails
. El único valor alternativo en este momento es :yui
, que utiliza la gema yui-compressor
.
3.3.2 config.assets.js_compressor
Define el compresor de JavaScript a usar. Los valores posibles son :terser
, :closure
, :uglifier
y :yui
, que requieren el uso de las gemas terser
, closure-compiler
, uglifier
o yui-compressor
, respectivamente.
3.3.3 config.assets.gzip
Un indicador que habilita la creación de una versión comprimida en gzip de los activos compilados, junto con los activos no comprimidos. Establecido en true
por defecto.
3.3.4 config.assets.paths
Contiene las rutas que se utilizan para buscar activos. Agregar rutas a esta opción de configuración hará que esas rutas se utilicen en la búsqueda de activos.
3.3.5 config.assets.precompile
Le permite especificar activos adicionales (además de application.css
y application.js
) que deben precompilarse cuando se ejecuta bin/rails assets:precompile
.
3.3.6 config.assets.unknown_asset_fallback
Le permite modificar el comportamiento de la tubería de activos cuando un activo no está en la tubería, si usa sprockets-rails 3.2.0 o más reciente.
El valor predeterminado depende de la versión objetivo de config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | true |
5.1 | false |
3.3.7 config.assets.prefix
Define el prefijo desde donde se sirven los activos. Por defecto es /assets
.
3.3.8 config.assets.manifest
Define la ruta completa que se usará para el archivo de manifiesto del precompilador de activos. Por defecto es un archivo llamado manifest-<random>.json
en el directorio config.assets.prefix
dentro de la carpeta pública.
3.3.9 config.assets.digest
Habilita el uso de huellas SHA256 en los nombres de los activos. Establecido en true
por defecto.
3.3.10 config.assets.debug
Deshabilita la concatenación y compresión de activos. Establecido en true
por defecto en development.rb
.
3.3.11 config.assets.version
Es una cadena de opción que se usa en la generación de hash SHA256. Esto se puede cambiar para forzar que todos los archivos se recompilen.
3.3.12 config.assets.compile
Es un booleano que se puede usar para activar la compilación en vivo de Sprockets en producción.
3.3.13 config.assets.logger
Acepta un registrador que se ajusta a la interfaz de Log4r o la clase Logger
de Ruby por defecto. Por defecto es el mismo configurado en config.logger
. Establecer config.assets.logger
en false
desactivará el registro de activos servidos.
3.3.14 config.assets.quiet
Deshabilita el registro de solicitudes de activos. Establecido en true
por defecto en development.rb
.
3.4 Configuración de Generadores
Rails le permite alterar qué generadores se usan con el método config.generators
. Este método toma un bloque:
config.generators do |g|
g.orm :active_record
g.test_framework :test_unit
end
El conjunto completo de métodos que se pueden usar en este bloque son los siguientes:
force_plural
permite nombres de modelo pluralizados. Por defecto esfalse
.helper
define si se deben generar o no ayudantes. Por defecto estrue
.integration_tool
define qué herramienta de integración usar para generar pruebas de integración. Por defecto es:test_unit
.system_tests
define qué herramienta de integración usar para generar pruebas de sistema. Por defecto es:test_unit
.orm
define qué orm usar. Por defecto esfalse
y usará Active Record por defecto.resource_controller
define qué generador usar para generar un controlador al usarbin/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
diferente deresource_controller
, define qué generador usar para generar un controlador scaffolded al usarbin/rails generate scaffold
. Por defecto es:scaffold_controller
.test_framework
define qué marco de prueba usar. Por defecto esfalse
y usará minitest por defecto.template_engine
define qué motor de plantillas usar, como ERB o Haml. Por defecto es:erb
.apply_rubocop_autocorrect_after_generate!
aplica la función de autocorrección de RuboCop después de que se ejecuten los generadores de Rails.
3.5 Configuración de Middleware
Cada aplicación Rails viene con un conjunto estándar de middleware que utiliza en este orden en el entorno de desarrollo:
3.5.1 ActionDispatch::HostAuthorization
Previene contra ataques de reencaminamiento de DNS y otros ataques de encabezado Host
.
Se incluye en el entorno de desarrollo por defecto con la siguiente configuración:
Rails.application.config.hosts = [
IPAddr.new("0.0.0.0/0"), # Todas las direcciones IPv4.
IPAddr.new("::/0"), # Todas las direcciones IPv6.
"localhost", # El dominio reservado localhost.
ENV["RAILS_DEVELOPMENT_HOSTS"] # Hosts adicionales separados por comas para desarrollo.
]
En otros entornos Rails.application.config.hosts
está vacío y no se realizarán
comprobaciones del encabezado Host
. Si desea protegerse contra ataques de encabezado
en producción, debe permitir manualmente los hosts permitidos con:
Rails.application.config.hosts << "product.com"
El host de una solicitud se verifica contra las entradas hosts
con el operador de caso (#===
), lo que permite que hosts
admita entradas de tipo Regexp
, Proc
y IPAddr
por nombrar algunos. Aquí hay un ejemplo con una expresión regular.
# Permitir solicitudes de subdominios como `www.product.com` y
# `beta1.product.com`.
Rails.application.config.hosts << /.*\.product\.com/
La expresión regular proporcionada se envolverá con ambos anclajes (\A
y \z
) por lo que debe coincidir con todo el nombre de host. /product.com/
, por ejemplo, una vez anclado, fallaría al coincidir con www.product.com
.
Se admite un caso especial que le permite permitir todos los subdominios:
# Permitir solicitudes de subdominios como `www.product.com` y
# `beta1.product.com`.
Rails.application.config.hosts << ".product.com"
Puede excluir ciertas solicitudes de las comprobaciones de Autorización de Host configurando
config.host_authorization.exclude
:
# Excluir solicitudes para la ruta /healthcheck/ de la comprobación de hosts
Rails.application.config.host_authorization = {
exclude: ->(request) { request.path.include?('healthcheck') }
}
Cuando una solicitud llega a un host no autorizado, se ejecutará una aplicación Rack predeterminada
y responderá con 403 Forbidden
. Esto se puede personalizar configurando
config.host_authorization.response_app
. Por ejemplo:
Rails.application.config.host_authorization = {
response_app: -> env do
[400, { "Content-Type" => "text/plain" }, ["Bad Request"]]
end
}
3.5.2 ActionDispatch::ServerTiming
Agrega el encabezado Server-Timing
a la respuesta, que incluye métricas de
rendimiento del servidor. Estos datos se pueden ver inspeccionando la respuesta en
el panel de Red de las Herramientas de Desarrollador del navegador. La mayoría de los navegadores
proporcionan una pestaña de Tiempo que visualiza los datos.
3.5.3 ActionDispatch::SSL
Fuerza que cada solicitud se sirva utilizando HTTPS. Habilitado si config.force_ssl
está establecido en true
. Las opciones pasadas a esto pueden configurarse estableciendo config.ssl_options
.
3.5.4 ActionDispatch::Static
Se utiliza para servir activos estáticos. Deshabilitado si config.public_file_server.enabled
es false
. Establezca config.public_file_server.index_name
si necesita servir un archivo de índice de directorio estático que no se llame index
. Por ejemplo, para servir main.html
en lugar de index.html
para solicitudes de directorio, establezca config.public_file_server.index_name
en "main"
.
3.5.5 ActionDispatch::Executor
Permite la recarga segura de código en hilos. Deshabilitado si config.allow_concurrency
es false
, lo que hace que Rack::Lock
se cargue. Rack::Lock
envuelve la aplicación en un mutex para que solo pueda ser llamada por un solo hilo a la vez.
3.5.6 ActiveSupport::Cache::Strategy::LocalCache
Sirve como una caché básica respaldada por memoria. Esta caché no es segura para hilos y está destinada solo a servir como una caché de memoria temporal para un solo hilo.
3.5.7 Rack::Runtime
Establece un encabezado X-Runtime
, que contiene el tiempo (en segundos) tomado para ejecutar la solicitud.
3.5.8 Rails::Rack::Logger
Notifica a los registros que la solicitud ha comenzado. Después de que la solicitud se completa, vacía todos los registros.
3.5.9 ActionDispatch::ShowExceptions
Rescata cualquier excepción devuelta por la aplicación y muestra bonitas páginas de excepción si la solicitud es local o si config.consider_all_requests_local
está establecido en true
. Si config.action_dispatch.show_exceptions
está establecido en :none
, las excepciones se lanzarán independientemente.
3.5.10 ActionDispatch::RequestId
Hace que un encabezado X-Request-Id único esté disponible para la respuesta y habilita el método ActionDispatch::Request#uuid
. Configurable con config.action_dispatch.request_id_header
.
3.5.11 ActionDispatch::RemoteIp
Verifica ataques de suplantación de IP y obtiene un client_ip
válido de los encabezados de la solicitud. Configurable con las opciones config.action_dispatch.ip_spoofing_check
y config.action_dispatch.trusted_proxies
.
3.5.12 Rack::Sendfile
Intercepta respuestas cuyo cuerpo se está sirviendo desde un archivo y lo reemplaza con un encabezado X-Sendfile específico del servidor. Configurable con config.action_dispatch.x_sendfile_header
.
3.5.13 ActionDispatch::Callbacks
Ejecuta las devoluciones de llamada de preparación antes de servir la solicitud.
3.5.14 ActionDispatch::Cookies
Establece cookies para la solicitud.
3.5.15 ActionDispatch::Session::CookieStore
Es responsable de almacenar la sesión en cookies. Se puede usar un middleware alternativo para esto cambiando config.session_store
.
3.5.16 ActionDispatch::Flash
Configura las claves flash
. Solo disponible si config.session_store
está establecido en un valor.
3.5.17 Rack::MethodOverride
Permite que el método se sobrescriba si params[:_method]
está establecido. Este es el middleware que admite los tipos de método HTTP PATCH, PUT y DELETE.
3.5.18 Rack::Head
Devuelve un cuerpo vacío para todas las solicitudes HEAD. Deja todas las demás solicitudes sin cambios.
3.5.19 Agregando Middleware Personalizado
Además de estos middleware habituales, puede agregar el suyo propio utilizando el método config.middleware.use
:
config.middleware.use Magical::Unicorns
Esto colocará el middleware Magical::Unicorns
al final de la pila. Puede usar insert_before
si desea agregar un middleware antes de otro.
config.middleware.insert_before Rack::Head, Magical::Unicorns
O puede insertar un middleware en una posición exacta utilizando índices. Por ejemplo, si desea insertar el middleware Magical::Unicorns
en la parte superior de la pila, puede hacerlo, de la siguiente manera:
config.middleware.insert_before 0, Magical::Unicorns
También hay insert_after
que insertará un middleware después de otro:
config.middleware.insert_after Rack::Head, Magical::Unicorns
Los middleware también se pueden intercambiar completamente y reemplazar por otros:
config.middleware.swap ActionController::Failsafe, Lifo::Failsafe
Los middleware se pueden mover de un lugar a otro:
config.middleware.move_before ActionDispatch::Flash, Magical::Unicorns
Esto moverá el middleware Magical::Unicorns
antes de
ActionDispatch::Flash
. También puede moverlo después:
config.middleware.move_after ActionDispatch::Flash, Magical::Unicorns
También se pueden eliminar completamente de la pila:
config.middleware.delete Rack::MethodOverride
3.6 Configuración de i18n
Todas estas opciones de configuración se delegan a la biblioteca I18n
.
3.6.1 config.i18n.available_locales
Define los locales disponibles permitidos para la aplicación. Por defecto son todas las claves de locales encontradas en los archivos de locales, usualmente solo :en
en una nueva aplicación.
3.6.2 config.i18n.default_locale
Establece el locale predeterminado de una aplicación utilizada para i18n. Por defecto es :en
.
3.6.3 config.i18n.enforce_available_locales
Asegura que todos los locales pasados a través de i18n deben ser declarados en la lista available_locales
, lanzando una excepción I18n::InvalidLocale
al establecer un locale no disponible. Por defecto es true
. Se recomienda no desactivar esta opción a menos que sea estrictamente necesario, ya que funciona como una medida de seguridad contra el establecimiento de cualquier locale no válido a partir de la entrada del usuario.
3.6.4 config.i18n.load_path
Establece la ruta que Rails usa para buscar archivos de locales. Por defecto es config/locales/**/*.{yml,rb}
.
3.6.5 config.i18n.raise_on_missing_translations
Determina si se debe lanzar un error por traducciones faltantes. Esto por defecto es false
.
3.6.6 config.i18n.fallbacks
Establece el comportamiento de reserva para traducciones faltantes. Aquí hay 3 ejemplos de uso para esta opción:
- Puede establecer la opción en
true
para usar el locale predeterminado como reserva, así:
config.i18n.fallbacks = true
- O puede establecer un array de locales como reserva, así:
config.i18n.fallbacks = [:tr, :en]
- O puede establecer diferentes reservas para locales individualmente. Por ejemplo, si desea usar
:tr
para:az
y:de
,:en
para:da
como reservas, puede hacerlo, así:
config.i18n.fallbacks = { az: :tr, da: [:de, :en] }
#o
config.i18n.fallbacks.map = { az: :tr, da: [:de, :en] }
3.7 Configuración de Active Model
3.7.1 config.active_model.i18n_customize_full_message
Controla si el formato de Error#full_message
puede ser sobrescrito en un archivo de locales i18n. Por defecto es false
.
Cuando se establece en true
, full_message
buscará un formato a nivel de atributo y modelo en los archivos de locales. El formato predeterminado es "%{attribute} %{message}"
, donde attribute
es el nombre del atributo y message
es el mensaje específico de validación. El siguiente ejemplo sobrescribe el formato para todos los atributos de Person
, así como el formato para un atributo específico de Person
(age
).
class Person
include ActiveModel::Validations
attr_accessor :name, :age
validates :name, :age, presence: true
end
en:
activemodel: # o activerecord:
errors:
models:
person:
# Sobrescribir el formato para todos los atributos de Person:
format: "Invalid %{attribute} (%{message})"
attributes:
age:
# Sobrescribir el formato para el atributo age:
format: "%{message}"
blank: "Please fill in your %{attribute}"
irb> person = Person.new.tap(&:valid?)
irb> person.errors.full_messages
=> [
"Invalid Name (can't be blank)",
"Please fill in your Age"
]
irb> person.errors.messages
=> {
:name => ["can't be blank"],
:age => ["Please fill in your Age"]
}
3.8 Configuración de Active Record
config.active_record
incluye una variedad de opciones de configuración:
3.8.1 config.active_record.logger
Acepta un logger que cumpla con la interfaz de Log4r o la clase predeterminada Ruby Logger, que luego se pasa a cualquier nueva conexión de base de datos realizada. Puedes recuperar este logger llamando a logger
en una clase de modelo de Active Record o en una instancia de modelo de Active Record. Establecer en nil
para deshabilitar el registro.
3.8.2 config.active_record.primary_key_prefix_type
Te permite ajustar el nombre de las columnas de clave primaria. Por defecto, Rails asume que las columnas de clave primaria se llaman id
(y esta opción de configuración no necesita establecerse). Hay dos opciones más:
:table_name
haría que la clave primaria para la clase Customer seacustomerid
.:table_name_with_underscore
haría que la clave primaria para la clase Customer seacustomer_id
.
3.8.3 config.active_record.table_name_prefix
Te permite establecer una cadena global que se antepone a los nombres de las tablas. Si estableces esto en northwest_
, entonces la clase Customer buscará northwest_customers
como su tabla. El valor predeterminado es una cadena vacía.
3.8.4 config.active_record.table_name_suffix
Te permite establecer una cadena global que se apende a los nombres de las tablas. Si estableces esto en _northwest
, entonces la clase Customer buscará customers_northwest
como su tabla. El valor predeterminado es una cadena vacía.
3.8.5 config.active_record.schema_migrations_table_name
Te permite establecer una cadena que se usará como el nombre de la tabla de migraciones de esquema.
3.8.6 config.active_record.internal_metadata_table_name
Te permite establecer una cadena que se usará como el nombre de la tabla de metadatos internos.
3.8.7 config.active_record.protected_environments
Te permite establecer una matriz de nombres de entornos donde las acciones destructivas deben estar prohibidas.
3.8.8 config.active_record.pluralize_table_names
Especifica si Rails buscará nombres de tabla singulares o plurales en la base de datos. Si se establece en true
(el valor predeterminado), entonces la clase Customer usará la tabla customers
. Si se establece en false
, entonces la clase Customer usará la tabla customer
.
3.8.9 config.active_record.default_timezone
Determina si usar Time.local
(si se establece en :local
) o Time.utc
(si se establece en :utc
) al extraer fechas y horas de la base de datos. El valor predeterminado es :utc
.
3.8.10 config.active_record.schema_format
Controla el formato para volcar el esquema de la base de datos a un archivo. Las opciones son :ruby
(el valor predeterminado) para una versión independiente de la base de datos que depende de las migraciones, o :sql
para un conjunto de declaraciones SQL (potencialmente dependientes de la base de datos).
3.8.11 config.active_record.error_on_ignored_order
Especifica si se debe generar un error si el orden de una consulta se ignora durante una consulta por lotes. Las opciones son true
(generar error) o false
(advertir). El valor predeterminado es false
.
3.8.12 config.active_record.timestamped_migrations
Controla si las migraciones están numeradas con enteros en serie o con marcas de tiempo. El valor predeterminado es true
, para usar marcas de tiempo, que se prefieren si hay varios desarrolladores trabajando en la misma aplicación.
3.8.13 config.active_record.automatically_invert_plural_associations
Controla si Active Record buscará automáticamente relaciones inversas con un nombre pluralizado.
Ejemplo:
class Post < ApplicationRecord
has_many :comments
end
class Comment < ApplicationRecord
belongs_to :post
end
En el caso anterior, Active Record solía buscar solo una asociación :comment
(singular) en Post
, y no la encontraba.
Con esta opción habilitada, también buscará una asociación :comments
. En la gran mayoría de los casos, tener la asociación inversa descubierta es beneficioso ya que puede prevenir algunas consultas inútiles, pero puede causar problemas de compatibilidad hacia atrás con código heredado que no lo espera.
Este comportamiento se puede deshabilitar por modelo:
class Comment < ApplicationRecord
self.automatically_invert_plural_associations = false
belongs_to :post
end
Y por asociación:
class Comment < ApplicationRecord
self.automatically_invert_plural_associations = true
belongs_to :post, inverse_of: nil
end
A partir de la versión | El valor predeterminado es |
---|---|
(original) | false |
3.8.14 config.active_record.validate_migration_timestamps
Controla si se deben validar las marcas de tiempo de las migraciones. Cuando se establece, se generará un error si el prefijo de marca de tiempo para una migración es más de un día antes de la marca de tiempo asociada con la hora actual. Esto se hace para prevenir el antedatado de archivos de migración, lo que puede afectar la generación de migraciones y otros comandos de migración. config.active_record.timestamped_migrations
debe estar establecido en true
.
El valor predeterminado depende de la versión de destino de config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | false |
7.2 | true |
3.8.15 config.active_record.db_warnings_action
Controla la acción a tomar cuando una consulta SQL produce una advertencia. Las siguientes opciones están disponibles:
:ignore
- Se ignorarán las advertencias de la base de datos. Este es el valor predeterminado.:log
- Las advertencias de la base de datos se registrarán a través 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 de informes de excepciones personalizado
Bugsnag.notify(warning.message) do |notification|
notification.add_metadata(:warning_code, warning.code)
notification.add_metadata(:warning_level, warning.level)
end
end
3.8.16 config.active_record.db_warnings_ignore
Especifica una lista blanca de códigos de advertencia y mensajes que se ignorarán, independientemente de la acción configurada db_warnings_action
. El comportamiento predeterminado es informar todas las advertencias. Las advertencias a ignorar se pueden especificar como Strings o Regexps. Por ejemplo:
config.active_record.db_warnings_action = :raise
# Las siguientes advertencias no se generarán
config.active_record.db_warnings_ignore = [
/Invalid utf8mb4 character string/,
"An exact warning message",
"1062", # Error MySQL 1062: Entrada duplicada
]
3.8.17 config.active_record.migration_strategy
Controla la clase de estrategia utilizada para realizar métodos de declaración de esquema en una migración. La clase predeterminada delega al adaptador de conexión. Las estrategias personalizadas deben heredar de ActiveRecord::Migration::ExecutionStrategy
, o pueden heredar de DefaultStrategy
, lo que preservará el comportamiento predeterminado para los métodos que no están implementados:
class CustomMigrationStrategy < ActiveRecord::Migration::DefaultStrategy
def drop_table(*)
raise "¡No se admite eliminar tablas!"
end
end
config.active_record.migration_strategy = CustomMigrationStrategy
3.8.18 config.active_record.lock_optimistically
Controla si Active Record usará bloqueo optimista y es true
por defecto.
3.8.19 config.active_record.cache_timestamp_format
Controla el formato del valor de la marca de tiempo en la clave de caché. El valor predeterminado es :usec
.
3.8.20 config.active_record.record_timestamps
Es un valor booleano que controla si se realiza o no el registro de marcas de tiempo de las operaciones de create
y update
en un modelo. El valor predeterminado es true
.
3.8.21 config.active_record.partial_inserts
Es un valor booleano y controla si se utilizan o no escrituras parciales al crear nuevos registros (es decir, si las inserciones solo establecen atributos que son diferentes del valor predeterminado).
El valor predeterminado depende de la versión de destino de config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | true |
7.0 | false |
3.8.22 config.active_record.partial_updates
Es un valor booleano y controla si se utilizan o no escrituras parciales al actualizar registros existentes (es decir, si las actualizaciones solo establecen atributos que están sucios). Ten en cuenta que al usar actualizaciones parciales, también debes usar bloqueo optimista config.active_record.lock_optimistically
ya que las actualizaciones concurrentes pueden escribir atributos basados en un estado de lectura posiblemente obsoleto. El valor predeterminado es true
.
3.8.23 config.active_record.maintain_test_schema
Es un valor booleano que controla si Active Record debe intentar mantener actualizado el esquema de tu base de datos de pruebas con db/schema.rb
(o db/structure.sql
) cuando ejecutas tus pruebas. El valor predeterminado es true
.
3.8.24 config.active_record.dump_schema_after_migration
Es una bandera que controla si debe ocurrir o no el volcado de esquema (db/schema.rb
o db/structure.sql
) cuando ejecutas migraciones. Esto se establece en false
en config/environments/production.rb
que es generado por Rails. El valor predeterminado es true
si esta configuración no está establecida.
3.8.25 config.active_record.dump_schemas
Controla qué esquemas de base de datos se volcarán al llamar a db:schema:dump
. Las opciones son :schema_search_path
(el valor predeterminado) que vuelca cualquier esquema listado en schema_search_path
, :all
que siempre vuelca todos los esquemas independientemente del schema_search_path
, o una cadena de esquemas separados por comas.
3.8.26 config.active_record.before_committed_on_all_records
Habilita los callbacks before_committed! en todos los registros inscritos en una transacción. El comportamiento anterior era ejecutar los callbacks solo en la primera copia de un registro si había múltiples copias del mismo registro inscritas en la transacción.
A partir de la versión | El valor predeterminado es |
---|---|
(original) | false |
7.1 | true |
3.8.27 config.active_record.belongs_to_required_by_default
Es un valor booleano y controla si un registro falla en la validación si la asociación belongs_to
no está presente.
El valor predeterminado depende de la versión de destino de config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | nil |
5.0 | true |
3.8.28 config.active_record.belongs_to_required_validates_foreign_key
Habilita la validación solo de columnas relacionadas con el padre para la presencia cuando el padre es obligatorio. El comportamiento anterior era validar la presencia del registro padre, lo que realizaba una consulta adicional para obtener el padre cada vez que se actualizaba el registro hijo, incluso cuando el padre no había cambiado.
A partir de la versión | El valor predeterminado es |
---|---|
(original) | true |
7.1 | false |
3.8.29 config.active_record.marshalling_format_version
Cuando se establece en 7.1
, habilita una serialización más eficiente de la instancia de Active Record con Marshal.dump
.
Esto cambia el formato de serialización, por lo que los modelos serializados de esta manera no pueden ser leídos por versiones anteriores (< 7.1) de Rails. Sin embargo, los mensajes que usan el formato antiguo aún pueden ser leídos, independientemente de si esta optimización está habilitada.
A partir de la versión | El valor predeterminado es |
---|---|
(original) | 6.1 |
7.1 | 7.1 |
3.8.30 config.active_record.action_on_strict_loading_violation
Habilita la generación o el registro de una excepción si strict_loading está establecido en una asociación. El valor predeterminado es :raise
en todos los entornos. Se puede cambiar a :log
para enviar violaciones al logger en lugar de generar.
3.8.31 config.active_record.strict_loading_by_default
Es un valor booleano que habilita o deshabilita el modo strict_loading por defecto. El valor predeterminado es false
.
3.8.32 config.active_record.warn_on_records_fetched_greater_than
Permite establecer un umbral de advertencia para el tamaño del resultado de la consulta. Si el número de registros devueltos por una consulta excede el umbral, se registra una advertencia. Esto se puede usar para identificar consultas que podrían estar causando un aumento de memoria.
3.8.33 config.active_record.index_nested_attribute_errors
Permite que los errores para relaciones has_many
anidadas se muestren con un índice además del error. El valor predeterminado es false
.
3.8.34 config.active_record.use_schema_cache_dump
Permite a los usuarios obtener información de caché de esquema de db/schema_cache.yml
(generado por bin/rails db:schema:cache:dump
), en lugar de tener que enviar una consulta a la base de datos para obtener esta información. El valor predeterminado es true
.
3.8.35 config.active_record.cache_versioning
Indica si se debe usar un método estable #cache_key
que esté acompañado por una versión cambiante en el método #cache_version
.
El valor predeterminado depende de la versión de destino de config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | false |
5.2 | true |
3.8.36 config.active_record.collection_cache_versioning
Habilita el uso de la misma clave de caché cuando el objeto que se está almacenando en caché de tipo ActiveRecord::Relation
cambia al mover la información volátil (máxima actualización en y conteo) de la clave de caché de la relación a la versión de caché para soportar el reciclaje de claves de caché.
El valor predeterminado depende de la versión de destino de config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | false |
6.0 | true |
3.8.37 config.active_record.has_many_inversing
Habilita el establecimiento del registro inverso al recorrer asociaciones belongs_to
a has_many
.
El valor predeterminado depende de la versión de destino de config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | false |
6.1 | true |
3.8.38 config.active_record.automatic_scope_inversing
Habilita la inferencia automática de inverse_of
para asociaciones con un alcance.
El valor predeterminado depende de la versión de destino de config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | false |
7.0 | true |
3.8.39 config.active_record.destroy_association_async_job
Permite especificar el trabajo que se utilizará para destruir los registros asociados en segundo plano. El valor predeterminado es ActiveRecord::DestroyAssociationAsyncJob
.
3.8.40 config.active_record.destroy_association_async_batch_size
Permite especificar el número máximo de registros que se destruirán en un trabajo en segundo plano mediante la opción de asociación dependent: :destroy_async
. Todo lo demás igual, un tamaño de lote menor encolará más trabajos en segundo plano de corta duración, mientras que un tamaño de lote mayor encolará menos trabajos en segundo plano de larga duración. Esta opción predeterminada es nil
, lo que hará que todos los registros dependientes de una asociación dada se destruyan en el mismo trabajo en segundo plano.
3.8.41 config.active_record.queues.destroy
Permite especificar la cola de Active Job para usar en trabajos de destrucción. Cuando esta opción es nil
, los trabajos de purga se envían a la cola predeterminada de Active Job (ver config.active_job.default_queue_name
). El valor predeterminado es nil
.
3.8.42 config.active_record.enumerate_columns_in_select_statements
Cuando es true
, siempre incluirá nombres de columnas en las declaraciones SELECT
, y evitará consultas de comodín SELECT * FROM ...
. Esto evita errores de caché de declaraciones preparadas al agregar columnas a una base de datos PostgreSQL, por ejemplo. El valor predeterminado es false
.
3.8.43 config.active_record.verify_foreign_keys_for_fixtures
Asegura que todas las restricciones de clave foránea sean válidas después de que se carguen los fixtures en las pruebas. Solo es compatible con PostgreSQL y SQLite.
El valor predeterminado depende de la versión de destino de config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | false |
7.0 | true |
3.8.44 config.active_record.raise_on_assign_to_attr_readonly
Habilita la generación de una excepción al asignar a atributos attr_readonly
. El comportamiento anterior permitía la asignación pero silenciosamente no persistía los cambios en la base de datos.
A partir de la versión | El valor predeterminado es |
---|---|
(original) | false |
7.1 | true |
3.8.45 config.active_record.run_commit_callbacks_on_first_saved_instances_in_transaction
Cuando múltiples instancias de Active Record cambian el mismo registro dentro de una transacción, Rails ejecuta los callbacks after_commit
o after_rollback
solo para una de ellas. Esta opción especifica cómo Rails elige qué instancia recibe los callbacks.
Cuando es true
, los callbacks transaccionales se ejecutan en la primera instancia que se guarda, incluso si su estado de instancia puede estar obsoleto.
Cuando es false
, los callbacks transaccionales se ejecutan en las instancias con el estado de instancia más fresco. Esas instancias se eligen de la siguiente manera:
- En general, ejecuta callbacks transaccionales en la última instancia que guarda un registro dado dentro de la transacción.
- Hay dos excepciones:
- Si el registro se crea dentro de la transacción, luego se actualiza por otra instancia, los callbacks
after_create_commit
se ejecutarán en la segunda instancia. Esto es en lugar de los callbacksafter_update_commit
que se ejecutarían ingenuamente basados en el estado de esa instancia. - Si el registro se destruye dentro de la transacción, entonces los callbacks
after_destroy_commit
se dispararán en la última instancia destruida, incluso si una instancia obsoleta realizó posteriormente una actualización (que afectará a 0 filas).
- Si el registro se crea dentro de la transacción, luego se actualiza por otra instancia, los callbacks
El valor predeterminado depende de la versión de destino de config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | true |
7.1 | false |
3.8.46 config.active_record.default_column_serializer
La implementación del serializador a usar si no se especifica explícitamente para una columna dada.
Históricamente, serialize
y store
, aunque permiten usar implementaciones de serializador alternativas, usarían YAML
por defecto, pero no es un formato muy eficiente y puede ser la fuente de vulnerabilidades de seguridad si no se emplea cuidadosamente.
Por lo tanto, se recomienda preferir formatos más estrictos y limitados para la serialización de bases de datos.
Desafortunadamente, no hay realmente ningún valor predeterminado adecuado disponible en la biblioteca estándar de Ruby. JSON
podría funcionar como formato, pero las gemas json
convertirán tipos no compatibles en cadenas, lo que puede llevar a errores.
El valor predeterminado depende de la versión de destino de config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | YAML |
7.1 | nil |
3.8.47 config.active_record.run_after_transaction_callbacks_in_order_defined
Cuando es true
, los callbacks after_commit
se ejecutan en el orden en que se definen en un modelo. Cuando es false
, se ejecutan en orden inverso.
Todos los demás callbacks siempre se ejecutan en el orden en que se definen en un modelo (a menos que uses prepend: true
).
El valor predeterminado depende de la versión de destino de config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | false |
7.1 | true |
3.8.48 config.active_record.query_log_tags_enabled
Especifica si habilitar o no los comentarios de consulta a nivel de adaptador. El valor predeterminado es false
.
NOTA: Cuando esto se establece en true
, las declaraciones preparadas de la base de datos se deshabilitarán automáticamente.
3.8.49 config.active_record.query_log_tags
Define un Array
que especifica las etiquetas clave/valor que se insertarán en un comentario SQL. El valor predeterminado es [ :application, :controller, :action, :job ]
. Las etiquetas disponibles son: :application
, :controller
, :namespaced_controller
, :action
, :job
, y :source_location
.
3.8.50 config.active_record.query_log_tags_format
Un Symbol
que especifica el formateador a usar para las etiquetas. Los valores válidos son :sqlcommenter
y :legacy
.
El valor predeterminado depende de la versión de destino de config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | :legacy |
7.1 | :sqlcommenter |
3.8.51 config.active_record.cache_query_log_tags
Especifica si habilitar o no el almacenamiento en caché de etiquetas de registro de consultas. Para aplicaciones que tienen un gran número de consultas, almacenar en caché las etiquetas de registro de consultas puede proporcionar un beneficio de rendimiento cuando el contexto no cambia durante la vida útil de la solicitud o ejecución del trabajo. El valor predeterminado es false
.
3.8.52 config.active_record.schema_cache_ignored_tables
Define la lista de tablas que deben ser ignoradas al generar el caché de esquema. Acepta un Array
de cadenas, que representan los nombres de las tablas, o expresiones regulares.
3.8.53 config.active_record.verbose_query_logs
Especifica si se deben registrar las ubicaciones de origen de los métodos que llaman a consultas de base de datos debajo de las consultas relevantes. Por defecto, la bandera es true
en desarrollo y false
en todos los demás entornos.
3.8.54 config.active_record.sqlite3_adapter_strict_strings_by_default
Especifica si el SQLite3Adapter debe usarse en un modo de cadenas estrictas. El uso de un modo de cadenas estrictas deshabilita los literales de cadena entre comillas dobles.
SQLite tiene algunas peculiaridades con respecto a los literales de cadena entre comillas dobles. Primero intenta considerar las cadenas entre comillas dobles como nombres de identificadores, pero si no existen, las considera como literales de cadena. Debido a esto, los errores tipográficos pueden pasar desapercibidos silenciosamente. Por ejemplo, es posible crear un índice para una columna no existente. Consulta la documentación de SQLite para más detalles.
El valor predeterminado depende de la versión de destino de config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | false |
7.1 | true |
3.8.55 config.active_record.postgresql_adapter_decode_dates
Especifica si el PostgresqlAdapter debe decodificar columnas de fecha.
ActiveRecord::Base.connection
.select_value("select '2024-01-01'::date").class #=> Date
El valor predeterminado depende de la versión de destino de config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | false |
7.2 | true |
3.8.56 config.active_record.async_query_executor
Especifica cómo se agrupan las consultas asíncronas.
El valor predeterminado es nil
, lo que significa que load_async
está deshabilitado y en su lugar ejecuta directamente consultas en primer plano. Para que las consultas se realicen realmente de manera asíncrona, debe establecerse en :global_thread_pool
o :multi_thread_pool
.
:global_thread_pool
usará un solo pool para todas las bases de datos a las que la aplicación se conecta. Esta es la configuración preferida para aplicaciones con solo una base de datos, o aplicaciones que solo consultan un fragmento de base de datos a la vez.
:multi_thread_pool
usará un pool por base de datos, y el tamaño de cada pool se puede configurar individualmente en database.yml
a través de las propiedades max_threads
y min_thread
. Esto puede ser útil para aplicaciones que consultan regularmente múltiples bases de datos a la vez, y que necesitan definir más precisamente la concurrencia máxima.
3.8.57 config.active_record.global_executor_concurrency
Utilizado junto con config.active_record.async_query_executor = :global_thread_pool
, define cuántas consultas asíncronas se pueden ejecutar concurrentemente.
El valor predeterminado es 4
.
Este número debe considerarse de acuerdo con el tamaño del pool de conexiones de la base de datos configurado en database.yml
. El pool de conexiones debe ser lo suficientemente grande como para acomodar tanto los hilos de primer plano (es decir, hilos de servidor web o de trabajador de trabajo) como los hilos de fondo.
Para cada proceso, Rails creará un ejecutor de consultas global que utiliza esta cantidad de hilos para procesar consultas asíncronas. Por lo tanto, el tamaño del pool debe ser al menos thread_count + global_executor_concurrency + 1
. Por ejemplo, si tu servidor web tiene un máximo de 3 hilos, y global_executor_concurrency
está establecido en 4, entonces el tamaño del pool debe ser al menos 8.
3.8.58 config.active_record.yaml_column_permitted_classes
El valor predeterminado es [Symbol]
. Permite a las aplicaciones incluir clases adicionales permitidas en safe_load()
en el ActiveRecord::Coders::YAMLColumn
.
3.8.59 config.active_record.use_yaml_unsafe_load
El valor predeterminado es false
. Permite a las aplicaciones optar por usar unsafe_load
en el ActiveRecord::Coders::YAMLColumn
.
3.8.60 config.active_record.raise_int_wider_than_64bit
El valor predeterminado es true
. Determina si se debe generar una excepción o no cuando el adaptador de PostgreSQL recibe un entero que es más amplio que la representación de 64 bits con signo.
3.8.61 config.active_record.generate_secure_token_on
Controla cuándo generar un valor para las declaraciones has_secure_token
. Por defecto, genera el valor cuando se inicializa el modelo:
class User < ApplicationRecord
has_secure_token
end
record = User.new
record.token # => "fwZcXX6SkJBJRogzMdciS7wf"
Con config.active_record.generate_secure_token_on = :create
, genera el valor cuando se crea el modelo:
# config/application.rb
config.active_record.generate_secure_token_on = :create
# app/models/user.rb
class User < ApplicationRecord
has_secure_token on: :create
end
record = User.new
record.token # => nil
record.save!
record.token # => "fwZcXX6SkJBJRogzMdciS7wf"
A partir de la versión | El valor predeterminado es |
---|---|
(original) | :create |
7.1 | :initialize |
3.8.62 config.active_record.permanent_connection_checkout
Controla si ActiveRecord::Base.connection
genera un error, emite una advertencia de desaprobación o ninguno de los dos.
ActiveRecord::Base.connection
saca una conexión de base de datos del pool y la mantiene alquilada hasta el final de la solicitud o trabajo. Este comportamiento puede ser indeseable en entornos que usan muchos más hilos o fibras de los que hay conexiones disponibles.
Esta configuración se puede usar para rastrear y eliminar código que llama a ActiveRecord::Base.connection
y migrarlo para usar ActiveRecord::Base.with_connection
en su lugar.
El valor se puede establecer en :disallowed
, :deprecated
, o true
para respectivamente generar un error, emitir una advertencia de desaprobación, o ninguno.
A partir de la versión | El valor predeterminado es |
---|---|
(original) | true |
3.8.63 ActiveRecord::ConnectionAdapters::Mysql2Adapter.emulate_booleans
y ActiveRecord::ConnectionAdapters::TrilogyAdapter.emulate_booleans
Controla si el adaptador MySQL de Active Record considerará todas las columnas tinyint(1)
como booleanas. El valor predeterminado es true
.
3.8.64 ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.create_unlogged_tables
Controla si las tablas de base de datos creadas por PostgreSQL deben ser "no registradas", lo que puede acelerar el rendimiento pero agrega un riesgo de pérdida de datos si la base de datos falla. Se recomienda encarecidamente no habilitar esto en un entorno de producción. El valor predeterminado es false
en todos los entornos.
Para habilitar esto en pruebas:
# config/environments/test.rb
ActiveSupport.on_load(:active_record_postgresqladapter) do
self.create_unlogged_tables = true
end
3.8.65 ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.datetime_type
Controla qué tipo nativo debe usar el adaptador de PostgreSQL de Active Record cuando llamas a datetime
en una migración o esquema. Toma un símbolo que debe corresponder a uno de los NATIVE_DATABASE_TYPES
configurados. El valor predeterminado es :timestamp
, lo que significa que t.datetime
en una migración creará una columna "timestamp sin zona horaria".
Para usar "timestamp con zona horaria":
# config/application.rb
ActiveSupport.on_load(:active_record_postgresqladapter) do
self.datetime_type = :timestamptz
end
Debes ejecutar bin/rails db:migrate
para reconstruir tu schema.rb si cambias esto.
3.8.66 ActiveRecord::SchemaDumper.ignore_tables
Acepta una matriz de tablas que no deben incluirse en ningún archivo de esquema generado.
3.8.67 ActiveRecord::SchemaDumper.fk_ignore_pattern
Permite establecer una expresión regular diferente que se usará para decidir si el nombre de una clave foránea debe volcarse en db/schema.rb o no. Por defecto, los nombres de clave foránea que comienzan con fk_rails_
no se exportan al volcado de esquema de base de datos. El valor predeterminado es /^fk_rails_[0-9a-f]{10}$/
.
3.8.68 config.active_record.encryption.add_to_filter_parameters
Habilita el filtrado automático de atributos encriptados en inspect
.
El valor predeterminado es true
.
3.8.69 config.active_record.encryption.hash_digest_class
Establece el algoritmo de digestión utilizado por Active Record Encryption.
El valor predeterminado depende de la versión de destino de config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | OpenSSL::Digest::SHA1 |
7.1 | OpenSSL::Digest::SHA256 |
3.8.70 config.active_record.encryption.support_sha1_for_non_deterministic_encryption
Habilita el soporte para descifrar datos existentes encriptados usando una clase de digestión SHA-1. Cuando es false
, solo admitirá el digest configurado en config.active_record.encryption.hash_digest_class
.
El valor predeterminado depende de la versión de destino de config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | true |
7.1 | false |
3.8.71 config.active_record.protocol_adapters
Al usar una URL para configurar la conexión de la base de datos, esta opción proporciona un mapeo del protocolo al adaptador de base de datos subyacente. Por ejemplo, esto significa que el entorno puede especificar DATABASE_URL=mysql://localhost/database
y Rails mapeará mysql
al adaptador mysql2
, pero la aplicación también puede anular estos mapeos:
config.active_record.protocol_adapters.mysql = "trilogy"
Si no se encuentra un mapeo, el protocolo se usa como el nombre del adaptador.
3.9 Configuración de Action Controller
config.action_controller
incluye una serie de configuraciones:
3.9.1 config.action_controller.asset_host
Establece el host para los activos. Útil cuando se utilizan CDNs para alojar activos en lugar del servidor de aplicaciones en sí. Solo debes usar esto si tienes una configuración diferente para Action Mailer, de lo contrario, usa config.asset_host
.
3.9.2 config.action_controller.perform_caching
Configura si la aplicación debe realizar las funciones de caché proporcionadas por el componente Action Controller o no. Establecer en false
en el entorno de desarrollo, true
en producción. Si no se especifica, el valor predeterminado será true
.
3.9.3 config.action_controller.default_static_extension
Configura la extensión utilizada para las páginas en caché. El valor predeterminado es .html
.
3.9.4 config.action_controller.include_all_helpers
Configura si todos los ayudantes de vista están disponibles en todas partes o están limitados al controlador correspondiente. Si se establece en false
, los métodos de UsersHelper
solo están disponibles para las vistas renderizadas como parte de UsersController
. Si es true
, los métodos de UsersHelper
están disponibles en todas partes. El comportamiento de configuración predeterminado (cuando esta opción no se establece explícitamente en true
o false
) es que todos los ayudantes de vista están disponibles para cada controlador.
3.9.5 config.action_controller.logger
Acepta un logger que cumpla con la interfaz de Log4r o la clase predeterminada Ruby Logger, que luego se utiliza para registrar información de Action Controller. Establecer en nil
para deshabilitar el registro.
3.9.6 config.action_controller.request_forgery_protection_token
Establece el nombre del parámetro de token para RequestForgery. Llamar a protect_from_forgery
lo establece en :authenticity_token
por defecto.
3.9.7 config.action_controller.allow_forgery_protection
Habilita o deshabilita la protección CSRF. Por defecto, esto es false
en el entorno de prueba y true
en todos los demás entornos.
3.9.8 config.action_controller.forgery_protection_origin_check
Configura si el encabezado HTTP Origin
debe verificarse contra el origen del sitio como una defensa CSRF adicional.
El valor predeterminado depende de la versión de destino de config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | false |
5.0 | true |
3.9.9 config.action_controller.per_form_csrf_tokens
Configura si los tokens CSRF son válidos solo para el método/acción para los que fueron generados.
El valor predeterminado depende de la versión de destino de config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | false |
5.0 | true |
3.9.10 config.action_controller.default_protect_from_forgery
Determina si se agrega protección contra falsificación en ActionController::Base
.
El valor predeterminado depende de la versión de destino de config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | false |
5.2 | true |
3.9.11 config.action_controller.relative_url_root
Se puede usar para decirle a Rails que estás desplegando en un subdirectorio. El valor predeterminado es config.relative_url_root
.
3.9.12 config.action_controller.permit_all_parameters
Establece que todos los parámetros para la asignación masiva estén permitidos por defecto. El valor predeterminado es false
.
3.9.13 config.action_controller.action_on_unpermitted_parameters
Controla el comportamiento cuando se encuentran parámetros que no están explícitamente permitidos. El valor predeterminado es :log
en los entornos de prueba y desarrollo, false
de lo contrario. Los valores pueden ser:
false
para no tomar ninguna acción:log
para emitir un eventoActiveSupport::Notifications.instrument
en el temaunpermitted_parameters.action_controller
y registrar en el nivel DEBUG:raise
para generar una excepciónActionController::UnpermittedParameters
3.9.14 config.action_controller.always_permitted_parameters
Establece una lista de parámetros permitidos que están permitidos por defecto. Los valores predeterminados son ['controller', 'action']
.
3.9.15 config.action_controller.enable_fragment_cache_logging
Determina si se deben registrar las lecturas y escrituras de caché de fragmentos en formato detallado como se muestra a continuación:
Read fragment views/v1/2914079/v1/2914079/recordings/70182313-20160225015037000000/d0bdf2974e1ef6d31685c3b392ad0b74 (0.6ms)
Rendered messages/_message.html.erb in 1.2 ms [cache hit]
Write fragment views/v1/2914079/v1/2914079/recordings/70182313-20160225015037000000/3b4e249ac9d168c617e32e84b99218b5 (1.1ms)
Rendered recordings/threads/_thread.html.erb in 1.5 ms [cache miss]
Por defecto, está establecido en false
, lo que da como resultado la siguiente salida:
Rendered messages/_message.html.erb in 1.2 ms [cache hit]
Rendered recordings/threads/_thread.html.erb in 1.5 ms [cache miss]
3.9.16 config.action_controller.raise_on_missing_callback_actions
Genera un AbstractController::ActionNotFound
cuando la acción especificada en las opciones :only
o :except
del callback falta en el controlador.
A partir de la versión | El valor predeterminado es |
---|---|
(original) | false |
7.1 | true (desarrollo y prueba), false (otros entornos) |
3.9.17 config.action_controller.raise_on_open_redirects
Protege una aplicación de redirigir inadvertidamente a un host externo (también conocido como "redirección abierta") haciendo que las redirecciones externas sean optativas.
Cuando esta configuración se establece en true
, se generará un ActionController::Redirecting::UnsafeRedirectError
cuando se pase una URL con un host externo a redirect_to. Si se debe permitir una redirección abierta, entonces allow_other_host: true
se puede agregar a la llamada a redirect_to
.
El valor predeterminado depende de la versión de destino de config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | false |
7.0 | true |
3.9.18 config.action_controller.log_query_tags_around_actions
Determina si el contexto del controlador para las etiquetas de consulta se actualizará automáticamente a través de un around_filter
. El valor predeterminado es true
.
3.9.19 config.action_controller.wrap_parameters_by_default
Antes de Rails 7.0, las nuevas aplicaciones se generaban con un inicializador llamado wrap_parameters.rb
que habilitaba el envoltorio de parámetros en ActionController::Base
para solicitudes JSON.
Establecer este valor de configuración en true
tiene el mismo comportamiento que el inicializador, lo que permite a las aplicaciones eliminar el inicializador si no desean personalizar el comportamiento de envoltorio de parámetros.
Independientemente de este valor, las aplicaciones pueden seguir personalizando el comportamiento de envoltorio de parámetros como antes en un inicializador o por controlador.
Consulta ParamsWrapper
para obtener más información sobre el envoltorio de parámetros.
El valor predeterminado depende de la versión de destino de config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | false |
7.0 | true |
3.9.20 ActionController::Base.wrap_parameters
Configura el ParamsWrapper
. Esto se puede llamar a nivel superior o en controladores individuales.
3.10 Configuración de Action Dispatch
3.10.1 config.action_dispatch.cookies_serializer
Especifica qué serializador usar para las cookies. Acepta los mismos valores que config.active_support.message_serializer
, además de :hybrid
que es un alias para :json_allow_marshal
.
El valor predeterminado depende de la versión de destino de config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | :marshal |
7.0 | :json |
3.10.2 config.action_dispatch.debug_exception_log_level
Configura el nivel de registro utilizado por el middleware ActionDispatch::DebugExceptions
al registrar excepciones no capturadas durante las solicitudes.
El valor predeterminado depende de la versión de destino de config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | :fatal |
7.1 | :error |
3.10.3 config.action_dispatch.default_headers
Es un hash con encabezados HTTP que se establecen por defecto en cada respuesta.
El valor predeterminado depende de la versión de destino de config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) |
|
7.0 |
|
7.1 |
|
3.10.4 config.action_dispatch.default_charset
Especifica el conjunto de caracteres predeterminado para todas las representaciones. El valor predeterminado es nil
.
3.10.5 config.action_dispatch.tld_length
Establece la longitud del TLD (dominio de nivel superior) para la aplicación. El valor predeterminado es 1
.
3.10.6 config.action_dispatch.ignore_accept_header
Se usa para determinar si se deben ignorar los encabezados de aceptación de una solicitud. El valor predeterminado es false
.
3.10.7 config.action_dispatch.x_sendfile_header
Especifica el encabezado X-Sendfile específico del servidor. Esto es útil para el envío acelerado de archivos desde el servidor. Por ejemplo, se puede establecer en 'X-Sendfile' para Apache.
3.10.8 config.action_dispatch.http_auth_salt
Establece el valor de sal de autenticación HTTP. El valor predeterminado es 'http authentication'
.
3.10.9 config.action_dispatch.signed_cookie_salt
Establece el valor de sal para cookies firmadas. El valor predeterminado es 'signed cookie'
.
3.10.10 config.action_dispatch.encrypted_cookie_salt
Establece el valor de sal para cookies encriptadas. El valor predeterminado es 'encrypted cookie'
.
3.10.11 config.action_dispatch.encrypted_signed_cookie_salt
Establece el valor de sal para cookies firmadas y encriptadas. El valor predeterminado es 'signed encrypted cookie'
.
3.10.12 config.action_dispatch.authenticated_encrypted_cookie_salt
Establece el valor de sal para cookies encriptadas autenticadas. El valor predeterminado es 'authenticated encrypted cookie'
.
3.10.13 config.action_dispatch.encrypted_cookie_cipher
Establece el cifrado a utilizar para cookies encriptadas. El valor predeterminado es "aes-256-gcm"
.
3.10.14 config.action_dispatch.signed_cookie_digest
Establece el digest a utilizar para cookies firmadas. El valor predeterminado es "SHA1"
.
3.10.15 config.action_dispatch.cookies_rotations
Permite rotar secretos, cifrados y digests para cookies firmadas y encriptadas.
3.10.16 config.action_dispatch.use_authenticated_cookie_encryption
Controla si las cookies firmadas y encriptadas usan el cifrado AES-256-GCM o el cifrado más antiguo AES-256-CBC.
El valor predeterminado depende de la versión de destino de config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | false |
5.2 | true |
3.10.17 config.action_dispatch.use_cookies_with_metadata
Habilita la escritura de cookies con los metadatos de propósito incrustados.
El valor predeterminado depende de la versión de destino de config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | false |
6.0 | true |
3.10.18 config.action_dispatch.perform_deep_munge
Configura si el método deep_munge
debe realizarse en los parámetros. Consulte la Guía de Seguridad para obtener más información. Por defecto es true
.
3.10.19 config.action_dispatch.rescue_responses
Configura qué excepciones se asignan a un estado HTTP. Acepta un hash y puede especificar pares de excepción/estado.
# Es recomendable usar #[]= o #merge! para respetar los valores predeterminados
config.action_dispatch.rescue_responses['MyAuthenticationError'] = :unauthorized
Utilice ActionDispatch::ExceptionWrapper.rescue_responses
para observar la configuración. Por defecto, está definido como:
{
'ActionController::RoutingError' => :not_found,
'AbstractController::ActionNotFound' => :not_found,
'ActionController::MethodNotAllowed' => :method_not_allowed,
'ActionController::UnknownHttpMethod' => :method_not_allowed,
'ActionController::NotImplemented' => :not_implemented,
'ActionController::UnknownFormat' => :not_acceptable,
'ActionDispatch::Http::MimeNegotiation::InvalidType' => :not_acceptable,
'ActionController::MissingExactTemplate' => :not_acceptable,
'ActionController::InvalidAuthenticityToken' => :unprocessable_entity,
'ActionController::InvalidCrossOriginRequest' => :unprocessable_entity,
'ActionDispatch::Http::Parameters::ParseError' => :bad_request,
'ActionController::BadRequest' => :bad_request,
'ActionController::ParameterMissing' => :bad_request,
'Rack::QueryParser::ParameterTypeError' => :bad_request,
'Rack::QueryParser::InvalidParameterError' => :bad_request,
'ActiveRecord::RecordNotFound' => :not_found,
'ActiveRecord::StaleObjectError' => :conflict,
'ActiveRecord::RecordInvalid' => :unprocessable_entity,
'ActiveRecord::RecordNotSaved' => :unprocessable_entity
}
Cualquier excepción que no esté configurada se mapeará a un error interno del servidor 500.
3.10.20 config.action_dispatch.cookies_same_site_protection
Configura el valor predeterminado del atributo SameSite
al establecer cookies. Cuando se establece en nil
, el atributo SameSite
no se agrega. Para permitir que el valor del atributo SameSite
se configure dinámicamente según la solicitud, se puede especificar un proc. Por ejemplo:
config.action_dispatch.cookies_same_site_protection = ->(request) do
:strict unless request.user_agent == "TestAgent"
end
El valor predeterminado depende de la versión objetivo de config.load_defaults
:
Comenzando con la versión | El valor predeterminado es |
---|---|
(original) | nil |
6.1 | :lax |
3.10.21 config.action_dispatch.ssl_default_redirect_status
Configura el código de estado HTTP predeterminado utilizado al redirigir solicitudes no GET/HEAD de HTTP a HTTPS en el middleware ActionDispatch::SSL
.
El valor predeterminado depende de la versión objetivo de config.load_defaults
:
Comenzando con la versión | El valor predeterminado es |
---|---|
(original) | 307 |
6.1 | 308 |
3.10.22 config.action_dispatch.log_rescued_responses
Permite registrar aquellas excepciones no manejadas configuradas en rescue_responses
. Por defecto es true
.
3.10.23 config.action_dispatch.show_exceptions
La configuración config.action_dispatch.show_exceptions
controla cómo Action Pack (específicamente el middleware ActionDispatch::ShowExceptions
) maneja las excepciones generadas al responder a solicitudes.
Establecer el valor en :all
configura Action Pack para rescatar de excepciones y renderizar las páginas de error correspondientes. Por ejemplo, Action Pack rescataría de una excepción ActiveRecord::RecordNotFound
y renderizaría el contenido de public/404.html
con un código de estado 404 Not found
.
Establecer el valor en :rescuable
configura Action Pack para rescatar de excepciones definidas en config.action_dispatch.rescue_responses
y elevar todas las demás. Por ejemplo, Action Pack rescataría de ActiveRecord::RecordNotFound
, pero elevaría un NoMethodError
.
Establecer el valor en :none
configura Action Pack para elevar todas las excepciones.
:all
- renderizar páginas de error para todas las excepciones:rescuable
- renderizar páginas de error para excepciones declaradas porconfig.action_dispatch.rescue_responses
:none
- elevar todas las excepciones
Comenzando con la versión | El valor predeterminado es |
---|---|
(original) | true |
7.1 | :all |
3.10.24 config.action_dispatch.always_write_cookie
Las cookies se escribirán al final de una solicitud si están marcadas como inseguras, si la solicitud se realiza a través de SSL o si la solicitud se realiza a un servicio onion.
Si se establece en true
, las cookies se escribirán incluso si no se cumple este criterio.
Por defecto es true
en development
, y false
en todos los demás entornos.
3.10.25 ActionDispatch::Callbacks.before
Toma un bloque de código para ejecutar antes de la solicitud.
3.10.26 ActionDispatch::Callbacks.after
Toma un bloque de código para ejecutar después de la solicitud.
3.11 Configuración de Action View
config.action_view
incluye un pequeño número de configuraciones:
3.11.1 config.action_view.cache_template_loading
Controla si las plantillas deben recargarse en cada solicitud. Por defecto es !config.enable_reloading
.
3.11.2 config.action_view.field_error_proc
Proporciona un generador de HTML para mostrar errores que provienen de Active Model. El bloque se evalúa dentro del contexto de una plantilla de Action View. El valor predeterminado es
Proc.new { |html_tag, instance| content_tag :div, html_tag, class: "field_with_errors" }
3.11.3 config.action_view.default_form_builder
Indica a Rails qué constructor de formularios usar por defecto. El valor predeterminado es ActionView::Helpers::FormBuilder
. Si desea que su clase de constructor de formularios se cargue después de la inicialización (para que se recargue en cada solicitud en desarrollo), puede pasarla como un String
.
3.11.4 config.action_view.logger
Acepta un registrador que cumpla con la interfaz de Log4r o la clase predeterminada de Logger de Ruby, que luego se utiliza para registrar información de Action View. Establezca en nil
para deshabilitar el registro.
3.11.5 config.action_view.erb_trim_mode
Controla si cierta sintaxis de ERB debe recortar. Por defecto es '-'
, lo que activa el recorte de espacios y nueva línea al final al usar <%= -%>
o <%= =%>
. Establecer esto en cualquier otra cosa desactivará el soporte de recorte.
3.11.6 config.action_view.frozen_string_literal
Compila la plantilla ERB con el comentario mágico # frozen_string_literal: true
, haciendo que todos los literales de cadena estén congelados y ahorrando asignaciones. Establezca en true
para habilitarlo para todas las vistas.
3.11.7 config.action_view.embed_authenticity_token_in_remote_forms
Permite establecer el comportamiento predeterminado para authenticity_token
en formularios con remote: true
. Por defecto está establecido en false
, lo que significa que los formularios remotos no incluirán authenticity_token
, lo cual es útil cuando está almacenando en caché el fragmento del formulario. Los formularios remotos obtienen la autenticidad de la etiqueta meta
, por lo que la inclusión es innecesaria a menos que soporte navegadores sin JavaScript. En tal caso, puede pasar authenticity_token: true
como una opción de formulario o establecer esta configuración en true
.
3.11.8 config.action_view.prefix_partial_path_with_controller_namespace
Determina si las partes se buscan desde un subdirectorio en plantillas renderizadas desde controladores con espacio de nombres. Por ejemplo, considere un controlador llamado Admin::ArticlesController
que renderiza esta plantilla:
<%= render @article %>
La configuración predeterminada es true
, que utiliza la parte en /admin/articles/_article.erb
. Establecer el valor en false
renderizaría /articles/_article.erb
, que es el mismo comportamiento que renderizar desde un controlador sin espacio de nombres como ArticlesController
.
3.11.9 config.action_view.automatically_disable_submit_tag
Determina si submit_tag
debe deshabilitarse automáticamente al hacer clic, esto por defecto es true
.
3.11.10 config.action_view.debug_missing_translation
Determina si envolver la clave de traducciones faltantes en una etiqueta <span>
o no. Esto por defecto es true
.
3.11.11 config.action_view.form_with_generates_remote_forms
Determina si form_with
genera formularios remotos o no.
El valor predeterminado depende de la versión objetivo de config.load_defaults
:
Comenzando con la versión | El valor predeterminado es |
---|---|
5.1 | true |
6.1 | false |
3.11.12 config.action_view.form_with_generates_ids
Determina si form_with
genera identificadores en los inputs.
El valor predeterminado depende de la versión objetivo de config.load_defaults
:
Comenzando con la versión | El valor predeterminado es |
---|---|
(original) | false |
5.2 | true |
3.11.13 config.action_view.default_enforce_utf8
Determina si los formularios se generan con una etiqueta oculta que obliga a las versiones anteriores de Internet Explorer a enviar formularios codificados en UTF-8.
El valor predeterminado depende de la versión objetivo de config.load_defaults
:
Comenzando con la versión | El valor predeterminado es |
---|---|
(original) | true |
6.0 | false |
3.11.14 config.action_view.image_loading
Especifica un valor predeterminado para el atributo loading
de las etiquetas <img>
renderizadas por el helper image_tag
. Por ejemplo, cuando se establece en "lazy"
, las etiquetas <img>
renderizadas por image_tag
incluirán loading="lazy"
, lo que instruye al navegador para que espere hasta que una imagen esté cerca del área de visualización para cargarla. (Este valor aún se puede anular por imagen pasando, por ejemplo, loading: "eager"
a image_tag
). Por defecto es nil
.
3.11.15 config.action_view.image_decoding
Especifica un valor predeterminado para el atributo decoding
de las etiquetas <img>
renderizadas por el helper image_tag
. Por defecto es nil
.
3.11.16 config.action_view.annotate_rendered_view_with_filenames
Determina si se debe anotar la vista renderizada con los nombres de archivo de la plantilla. Esto por defecto es false
.
3.11.17 config.action_view.preload_links_header
Determina si javascript_include_tag
y stylesheet_link_tag
generarán un encabezado link
que precarga los activos.
El valor predeterminado depende de la versión objetivo de config.load_defaults
:
Comenzando con la versión | El valor predeterminado es |
---|---|
(original) | nil |
6.1 | true |
3.11.18 config.action_view.button_to_generates_button_tag
Cuando es false
, button_to
renderizará un <button>
o un <input>
dentro de un <form>
dependiendo de cómo se pase el contenido (<form>
omitido por brevedad):
<%= button_to "Content", "/" %>
# => <input type="submit" value="Content">
<%= button_to "/" do %>
Content
<% end %>
# => <button type="submit">Content</button>
Establecer este valor en true
hace que button_to
genere una etiqueta <button>
dentro del <form>
en ambos casos.
El valor predeterminado depende de la versión objetivo de config.load_defaults
:
Comenzando con la versión | El valor predeterminado es |
---|---|
(original) | false |
7.0 | true |
3.11.19 config.action_view.apply_stylesheet_media_default
Determina si stylesheet_link_tag
renderizará screen
como el valor predeterminado para el atributo media
cuando no se proporcione.
El valor predeterminado depende de la versión objetivo de config.load_defaults
:
Comenzando con la versión | El valor predeterminado es |
---|---|
(original) | true |
7.0 | false |
3.11.20 config.action_view.prepend_content_exfiltration_prevention
Determina si los helpers form_tag
y button_to
producirán etiquetas HTML precedidas de HTML seguro para el navegador (pero técnicamente inválido) que garantiza que su contenido no pueda ser capturado por ninguna etiqueta sin cerrar anterior. El valor predeterminado es false
.
3.11.21 config.action_view.sanitizer_vendor
Configura el conjunto de sanitizadores HTML utilizados por Action View configurando ActionView::Helpers::SanitizeHelper.sanitizer_vendor
. El valor predeterminado depende de la versión objetivo de config.load_defaults
:
Comenzando con la versión | El valor predeterminado es | Qué analiza el marcado como |
---|---|---|
(original) | Rails::HTML4::Sanitizer |
HTML4 |
7.1 | Rails::HTML5::Sanitizer (ver NOTA) |
HTML5 |
NOTA: Rails::HTML5::Sanitizer
no es compatible con JRuby, por lo que en plataformas JRuby Rails recurrirá a Rails::HTML4::Sanitizer
.
3.12 Configuración de Action Mailbox
config.action_mailbox
proporciona las siguientes opciones de configuración:
3.12.1 config.action_mailbox.logger
Contiene el registrador utilizado por Action Mailbox. Acepta un registrador que cumpla con la interfaz de Log4r o la clase predeterminada de Logger de Ruby. El valor predeterminado es Rails.logger
.
config.action_mailbox.logger = ActiveSupport::Logger.new(STDOUT)
3.12.2 config.action_mailbox.incinerate_after
Acepta un ActiveSupport::Duration
que indica cuánto tiempo después del procesamiento deben destruirse los registros ActionMailbox::InboundEmail
. Por defecto es 30.days
.
# Incinerar correos electrónicos entrantes 14 días después del procesamiento.
config.action_mailbox.incinerate_after = 14.days
3.12.3 config.action_mailbox.queues.incineration
Acepta un símbolo que indica la cola de Active Job a utilizar para trabajos de incineración. Cuando esta opción es nil
, los trabajos de incineración se envían a la cola predeterminada de Active Job (ver config.active_job.default_queue_name
) .
El valor predeterminado depende de la versión objetivo de config.load_defaults
:
Comenzando con la versión | El valor predeterminado es |
---|---|
(original) | :action_mailbox_incineration |
6.1 | nil |
3.12.4 config.action_mailbox.queues.routing
Acepta un símbolo que indica la cola de Active Job a utilizar para trabajos de enrutamiento. Cuando esta opción es nil
, los trabajos de enrutamiento se envían a la cola predeterminada de Active Job (ver config.active_job.default_queue_name
) .
El valor predeterminado depende de la versión objetivo de config.load_defaults
:
Comenzando con la versión | El valor predeterminado es |
---|---|
(original) | :action_mailbox_routing |
6.1 | nil |
3.12.5 config.action_mailbox.storage_service
Acepta un símbolo que indica el servicio de Active Storage a utilizar para cargar correos electrónicos. Cuando esta opción es nil
, los correos electrónicos se cargan en el servicio predeterminado de Active Storage (ver config.active_storage.service
).
3.13 Configuración de Action Mailer
Hay una serie de configuraciones disponibles en config.action_mailer
:
3.13.1 config.action_mailer.asset_host
Establece el host para los activos. Útil cuando se utilizan CDNs para alojar activos en lugar del servidor de aplicaciones en sí. Debe usar esto solo si tiene una configuración diferente para Action Controller, de lo contrario use config.asset_host
.
3.13.2 config.action_mailer.logger
Acepta un registrador que cumpla con la interfaz de Log4r o la clase predeterminada de Logger de Ruby, que luego se utiliza para registrar información de Action Mailer. Establezca en nil
para deshabilitar el registro.
3.13.3 config.action_mailer.smtp_settings
Permite una configuración detallada para el método de entrega :smtp
. Acepta un hash de opciones, que puede incluir cualquiera de estas opciones:
:address
- Permite usar un servidor de correo remoto. Simplemente cámbielo de su configuración predeterminada "localhost".:port
- En el caso de que su servidor de correo no funcione en el puerto 25, puede cambiarlo.:domain
- Si necesita especificar un dominio HELO, puede hacerlo aquí.:user_name
- Si su servidor de correo requiere autenticación, establezca el nombre de usuario en esta configuración.:password
- Si su servidor de correo requiere autenticación, establezca la contraseña en esta configuración.:authentication
- Si su servidor de correo requiere autenticación, debe especificar el tipo de autenticación aquí. Esto es un símbolo y uno de:plain
,:login
,:cram_md5
.:enable_starttls
- Use STARTTLS al conectarse a su servidor SMTP y falle si no es compatible. Por defecto esfalse
.:enable_starttls_auto
- Detecta si STARTTLS está habilitado en su servidor SMTP y comienza a usarlo. Por defecto estrue
.:openssl_verify_mode
- Al usar TLS, puede establecer cómo OpenSSL verifica el certificado. Esto es útil si necesita validar un certificado autofirmado y/o un certificado comodín. Esto puede ser uno de los constantes de verificación de OpenSSL,:none
o:peer
-- o la constante directamenteOpenSSL::SSL::VERIFY_NONE
oOpenSSL::SSL::VERIFY_PEER
, respectivamente.:ssl/:tls
- Habilita la conexión SMTP para usar SMTP/TLS (SMTPS: SMTP sobre conexión TLS directa).:open_timeout
- Número de segundos para esperar mientras se intenta abrir una conexión.:read_timeout
- Número de segundos para esperar hasta que se agote el tiempo de espera de una llamada read(2).
Además, es posible pasar cualquier opción de configuración que respete Mail::SMTP
.
3.13.4 config.action_mailer.smtp_timeout
Antes de la versión 2.8.0, el gem mail
no configuraba ningún tiempo de espera predeterminado para sus solicitudes SMTP. Esta configuración permite a las aplicaciones configurar valores predeterminados para :open_timeout
y :read_timeout
en el gem mail
para que las solicitudes no se queden atascadas indefinidamente.
El valor predeterminado depende de la versión objetivo de config.load_defaults
:
Comenzando con la versión | El valor predeterminado es |
---|---|
(original) | nil |
7.0 | 5 |
3.13.5 config.action_mailer.sendmail_settings
Permite una configuración detallada para el método de entrega :sendmail
. Acepta un hash de opciones, que puede incluir cualquiera de estas opciones:
:location
- La ubicación del ejecutable sendmail. Por defecto es/usr/sbin/sendmail
.:arguments
- Los argumentos de la línea de comandos. Por defecto es%w[ -i ]
.
3.13.6 config.action_mailer.file_settings
Configura el método de entrega :file
. Acepta un hash de opciones, que puede incluir:
:location
- La ubicación donde se guardan los archivos. Por defecto es"#{Rails.root}/tmp/mails"
.:extension
- La extensión del archivo. Por defecto es la cadena vacía.
3.13.7 config.action_mailer.raise_delivery_errors
Especifica si se debe elevar un error si no se puede completar la entrega de correo electrónico. Por defecto es true
.
3.13.8 config.action_mailer.delivery_method
Define el método de entrega y por defecto es :smtp
. Consulte la sección de configuración en la guía de Action Mailer para obtener más información.
3.13.9 config.action_mailer.perform_deliveries
Especifica si el correo se entregará realmente y es true
por defecto. Puede ser conveniente establecerlo en false
para pruebas.
3.13.10 config.action_mailer.default_options
Configura los valores predeterminados de Action Mailer. Úselo para establecer opciones como from
o reply_to
para cada correo. Estos valores predeterminados son:
{
mime_version: "1.0",
charset: "UTF-8",
content_type: "text/plain",
parts_order: ["text/plain", "text/enriched", "text/html"]
}
Asigne un hash para establecer opciones adicionales:
config.action_mailer.default_options = {
from: "noreply@example.com"
}
3.13.11 config.action_mailer.observers
Registra observadores que serán notificados cuando se entregue el correo.
config.action_mailer.observers = ["MailObserver"]
3.13.12 config.action_mailer.interceptors
Registra interceptores que se llamarán antes de enviar el correo.
config.action_mailer.interceptors = ["MailInterceptor"]
3.13.13 config.action_mailer.preview_interceptors
Registra interceptores que se llamarán antes de previsualizar el correo.
config.action_mailer.preview_interceptors = ["MyPreviewMailInterceptor"]
3.13.14 config.action_mailer.preview_paths
Especifica las ubicaciones de las vistas previas del correo. Agregar rutas a esta opción de configuración hará que esas rutas se utilicen en la búsqueda de vistas previas del correo.
config.action_mailer.preview_paths << "#{Rails.root}/lib/mailer_previews"
3.13.15 config.action_mailer.show_previews
Habilitar o deshabilitar vistas previas del correo. Por defecto, esto es true
en desarrollo.
config.action_mailer.show_previews = false
3.13.16 config.action_mailer.perform_caching
Especifica si las plantillas del correo deben realizar caché de fragmentos o no. Si no se especifica, el valor predeterminado será true
.
3.13.17 config.action_mailer.deliver_later_queue_name
Especifica la cola de Active Job a utilizar para el trabajo de entrega predeterminado (ver config.action_mailer.delivery_job
). Cuando esta opción se establece en nil
, los trabajos de entrega se envían a la cola predeterminada de Active Job (ver config.active_job.default_queue_name
) .
Las clases de correo pueden anular esto para usar una cola diferente. Tenga en cuenta que esto solo se aplica cuando se utiliza el trabajo de entrega predeterminado. Si su correo está utilizando un trabajo personalizado, se utilizará su cola.
Asegúrese de que su adaptador de Active Job también esté configurado para procesar la cola especificada, de lo contrario, los trabajos de entrega pueden ser ignorados silenciosamente.
El valor predeterminado depende de la versión objetivo de config.load_defaults
:
Comenzando con la versión | El valor predeterminado es |
---|---|
(original) | :mailers |
6.1 | nil |
3.13.18 config.action_mailer.delivery_job
Especifica el trabajo de entrega para el correo.
El valor predeterminado depende de la versión objetivo de config.load_defaults
:
Comenzando con la versión | El valor predeterminado es |
---|---|
(original) | ActionMailer::MailDeliveryJob |
6.0 | "ActionMailer::MailDeliveryJob" |
3.14 Configuración de Active Support
Hay algunas opciones de configuración disponibles en Active Support:
3.14.1 config.active_support.bare
Habilita o deshabilita la carga de active_support/all
al iniciar Rails. Por defecto es nil
, lo que significa que se carga active_support/all
.
3.14.2 config.active_support.test_order
Establece el orden en que se ejecutan los casos de prueba. Los valores posibles son :random
y :sorted
. Por defecto es :random
.
3.14.3 config.active_support.escape_html_entities_in_json
Habilita o deshabilita el escape de entidades HTML en la serialización JSON. Por defecto es true
.
3.14.4 config.active_support.use_standard_json_time_format
Habilita o deshabilita la serialización de fechas en formato ISO 8601. Por defecto es true
.
3.14.5 config.active_support.time_precision
Establece la precisión de los valores de tiempo codificados en JSON. Por defecto es 3
.
3.14.6 config.active_support.hash_digest_class
Permite configurar la clase de digest a utilizar para generar digests no sensibles, como el encabezado ETag.
El valor predeterminado depende de la versión objetivo de config.load_defaults
:
Comenzando con la versión | El valor predeterminado es |
---|---|
(original) | OpenSSL::Digest::MD5 |
5.2 | OpenSSL::Digest::SHA1 |
7.0 | OpenSSL::Digest::SHA256 |
3.14.7 config.active_support.key_generator_hash_digest_class
Permite configurar la clase de digest a utilizar para derivar secretos de la base secreta configurada, como para cookies encriptadas.
El valor predeterminado depende de la versión objetivo de config.load_defaults
:
Comenzando con la versión | El valor predeterminado es |
---|---|
(original) | OpenSSL::Digest::SHA1 |
7.0 | OpenSSL::Digest::SHA256 |
3.14.8 config.active_support.use_authenticated_message_encryption
Especifica si se debe utilizar la encriptación autenticada AES-256-GCM como el cifrado predeterminado para encriptar mensajes en lugar de AES-256-CBC.
El valor predeterminado depende de la versión objetivo de config.load_defaults
:
Comenzando con la versión | El valor predeterminado es |
---|---|
(original) | false |
5.2 | true |
3.14.9 config.active_support.message_serializer
Especifica el serializador predeterminado utilizado por las instancias de ActiveSupport::MessageEncryptor
y ActiveSupport::MessageVerifier
. Para facilitar la migración entre serializadores, los serializadores proporcionados incluyen un mecanismo de respaldo para admitir múltiples formatos de deserialización:
Serializador | Serializar y deserializar | Respaldo de deserialización |
---|---|---|
:marshal |
Marshal |
ActiveSupport::JSON , ActiveSupport::MessagePack |
:json |
ActiveSupport::JSON |
ActiveSupport::MessagePack |
:json_allow_marshal |
ActiveSupport::JSON |
ActiveSupport::MessagePack , Marshal |
:message_pack |
ActiveSupport::MessagePack |
ActiveSupport::JSON |
:message_pack_allow_marshal |
ActiveSupport::MessagePack |
ActiveSupport::JSON , Marshal |
ADVERTENCIA: Marshal
es un posible vector para ataques de deserialización en casos donde se ha filtrado un secreto de firma de mensajes. Si es posible, elija un serializador que no admita Marshal
.
Los serializadores :message_pack
y :message_pack_allow_marshal
admiten el redondeo de algunos tipos de Ruby que no son compatibles con JSON, como Symbol
. También pueden proporcionar un mejor rendimiento y tamaños de carga útiles más pequeños. Sin embargo, requieren el gem msgpack
.
Cada uno de los serializadores anteriores emitirá una notificación de evento message_serializer_fallback.active_support
cuando recurran a un formato de deserialización alternativo, lo que le permitirá rastrear con qué frecuencia ocurren dichos respaldos.
Alternativamente, puede especificar cualquier objeto de serializador que responda a los métodos dump
y load
. Por ejemplo:
config.active_support.message_serializer = YAML
El valor predeterminado depende de la versión objetivo de config.load_defaults
:
Comenzando con la versión | El valor predeterminado es |
---|---|
(original) | :marshal |
7.1 | :json_allow_marshal |
3.14.10 config.active_support.use_message_serializer_for_metadata
Cuando es true
, habilita una optimización de rendimiento que serializa los datos del mensaje y los metadatos juntos. Esto cambia el formato del mensaje, por lo que los mensajes serializados de esta manera no pueden ser leídos por versiones anteriores (< 7.1) de Rails. Sin embargo, los mensajes que utilizan el formato antiguo aún se pueden leer, independientemente de si esta optimización está habilitada.
El valor predeterminado depende de la versión objetivo de config.load_defaults
:
Comenzando con la versión | El valor predeterminado es |
---|---|
(original) | false |
7.1 | true |
3.14.11 config.active_support.cache_format_version
Especifica qué formato de serialización utilizar para la caché. Los valores posibles son 7.0
y 7.1
.
7.0
serializa las entradas de caché de manera más eficiente.
7.1
mejora aún más la eficiencia y permite detectar entradas de caché caducadas y con versiones no coincidentes sin deserializar sus valores. También incluye una optimización para valores de cadena simples, como fragmentos de vista.
Todos los formatos son compatibles hacia atrás y hacia adelante, lo que significa que las entradas de caché escritas en un formato pueden ser leídas al usar otro formato. Este comportamiento facilita la migración entre formatos sin invalidar toda la caché.
El valor predeterminado depende de la versión objetivo de config.load_defaults
:
Comenzando con la versión | El valor predeterminado es |
---|---|
7.0 | 7.0 |
7.1 | 7.1 |
3.14.12 config.active_support.deprecation
Configura el comportamiento de las advertencias de desaprobación. Consulte Deprecation::Behavior
para una descripción de las opciones disponibles.
En los archivos generados por defecto config/environments
, esto se establece en :log
para desarrollo y :stderr
para prueba, y se omite para producción en favor de config.active_support.report_deprecations
.
3.14.13 config.active_support.disallowed_deprecation
Configura el comportamiento de las advertencias de desaprobación no permitidas. Consulte Deprecation::Behavior
para una descripción de las opciones disponibles.
En los archivos generados por defecto config/environments
, esto se establece en :raise
tanto para desarrollo como para prueba, y se omite para producción en favor de config.active_support.report_deprecations
.
3.14.14 config.active_support.disallowed_deprecation_warnings
Configura las advertencias de desaprobación que la Aplicación considera no permitidas. Esto permite, por ejemplo, tratar desaprobaciones específicas como fallos graves.
3.14.15 config.active_support.report_deprecations
Cuando es false
, desactiva todas las advertencias de desaprobación, incluidas las desaprobaciones no permitidas, de los desaprobadores de la aplicación. Esto incluye todas las desaprobaciones de Rails y otros gems que pueden agregar su desaprobador a la colección de desaprobadores, pero puede que no evite todas las advertencias de desaprobación emitidas por ActiveSupport::Deprecation.
En los archivos generados por defecto config/environments
, esto se establece en false
para producción.
3.14.16 config.active_support.isolation_level
Configura la localización de la mayoría del estado interno de Rails. Si utiliza un servidor basado en fibras o un procesador de trabajos (por ejemplo, falcon
), debe establecerlo en :fiber
. De lo contrario, es mejor usar la localización :thread
. Por defecto es :thread
.
3.14.17 config.active_support.executor_around_test_case
Configura la suite de pruebas para llamar a Rails.application.executor.wrap
alrededor de los casos de prueba. Esto hace que los casos de prueba se comporten más cerca de una solicitud o trabajo real. Varias características que normalmente están deshabilitadas en pruebas, como la caché de consultas de Active Record y las consultas asincrónicas, se habilitarán.
El valor predeterminado depende de la versión objetivo de config.load_defaults
:
Comenzando con la versión | El valor predeterminado es |
---|---|
(original) | false |
7.0 | true |
3.14.18 ActiveSupport::Logger.silencer
Se establece en false
para deshabilitar la capacidad de silenciar el registro en un bloque. El valor predeterminado es true
.
3.14.19 ActiveSupport::Cache::Store.logger
Especifica el registrador a utilizar dentro de las operaciones de almacenamiento en caché.
3.14.20 ActiveSupport.to_time_preserves_timezone
Especifica si los métodos to_time
preservan el desplazamiento UTC de sus receptores. Si es false
, los métodos to_time
convertirán al desplazamiento UTC del sistema local en su lugar.
El valor predeterminado depende de la versión objetivo de config.load_defaults
:
Comenzando con la versión | El valor predeterminado es |
---|---|
(original) | false |
5.0 | true |
3.14.21 ActiveSupport.utc_to_local_returns_utc_offset_times
Configura ActiveSupport::TimeZone.utc_to_local
para devolver un tiempo con un desplazamiento UTC en lugar de un tiempo UTC que incorpore ese desplazamiento.
El valor predeterminado depende de la versión objetivo de config.load_defaults
:
Comenzando con la versión | El valor predeterminado es |
---|---|
(original) | false |
6.1 | true |
3.14.22 config.active_support.raise_on_invalid_cache_expiration_time
Especifica si se debe elevar un ArgumentError
si Rails.cache
fetch
o write
reciben un tiempo de expires_at
o expires_in
inválido.
Las opciones son true
y false
. Si es false
, la excepción se informará como handled
y se registrará en su lugar.
El valor predeterminado depende de la versión objetivo de config.load_defaults
:
Comenzando con la versión | El valor predeterminado es |
---|---|
(original) | false |
7.1 | true |
3.15 Configuración de Active Job
config.active_job
proporciona las siguientes opciones de configuración:
3.15.1 config.active_job.queue_adapter
Establece el adaptador para el backend de cola. El adaptador predeterminado es :async
. Para obtener una lista actualizada de adaptadores integrados, consulte la documentación de la API de ActiveJob::QueueAdapters.
# Asegúrese de tener el gem del adaptador en su Gemfile
# y siga las instrucciones de instalación
# y despliegue específicas del adaptador.
config.active_job.queue_adapter = :sidekiq
3.15.2 config.active_job.default_queue_name
Se puede utilizar para cambiar el nombre de la cola predeterminada. Por defecto, esto es "default"
.
config.active_job.default_queue_name = :medium_priority
3.15.3 config.active_job.queue_name_prefix
Le permite establecer un prefijo opcional y no vacío para los nombres de cola de todos los trabajos. Por defecto, está en blanco y no se utiliza.
La siguiente configuración colocaría el trabajo dado en la cola production_high_priority
cuando se ejecute en producción:
config.active_job.queue_name_prefix = Rails.env
class GuestsCleanupJob < ActiveJob::Base
queue_as :high_priority
#....
end
3.15.4 config.active_job.queue_name_delimiter
Tiene un valor predeterminado de '_'
. Si se establece queue_name_prefix
, entonces queue_name_delimiter
une el prefijo y el nombre de cola no prefijado.
La siguiente configuración colocaría el trabajo proporcionado en la cola video_server.low_priority
:
# el prefijo debe establecerse para que se use el delimitador
config.active_job.queue_name_prefix = 'video_server'
config.active_job.queue_name_delimiter = '.'
class EncoderJob < ActiveJob::Base
queue_as :low_priority
#....
end
3.15.5 config.active_job.enqueue_after_transaction_commit
Controla si los métodos #perform_later
y similares de Active Job difieren automáticamente la cola del trabajo hasta después de que se confirme la transacción de Active Record actual.
Se puede establecer en:
:never
- Nunca diferir la cola.:always
- Siempre diferir la cola.:default
- Dejar que el adaptador de cola defina el comportamiento.
Los backends de Active Job que utilizan la misma base de datos que Active Record como cola, generalmente deben evitar el diferimiento, y otros deben permitirlo.
Ejemplo:
Topic.transaction do
topic = Topic.create(title: "New Topic")
NewTopicNotificationJob.perform_later(topic)
end
En este ejemplo, si la configuración se establece en :never
, el trabajo se colocará en cola inmediatamente, incluso si el Topic
aún no se ha confirmado. Debido a esto, si el trabajo se recoge casi de inmediato, o si la transacción no tiene éxito por alguna razón, el trabajo no encontrará este tema en la base de datos.
Si se establece en :always
, el trabajo se colocará realmente en cola después de que la transacción se haya confirmado. Si la transacción se revierte, el trabajo no se colocará en cola en absoluto.
Esta configuración también se puede establecer por clase de trabajo:
class SomeJob < ApplicationJob
self.enqueue_after_transaction_commit = :never
end
Comenzando con la versión | El valor predeterminado es |
---|---|
(original) | :never |
7.2 | :default |
3.15.6 config.active_job.logger
Acepta un registrador que cumpla con la interfaz de Log4r o la clase predeterminada de Logger de Ruby, que luego se utiliza para registrar información de Active Job. Puede recuperar este registrador llamando a logger
en una clase o instancia de Active Job. Establezca en nil
para deshabilitar el registro.
3.15.7 config.active_job.custom_serializers
Permite establecer serializadores de argumentos personalizados. Por defecto es []
.
3.15.8 config.active_job.log_arguments
Controla si se registran los argumentos de un trabajo. Por defecto es true
.
3.15.9 config.active_job.verbose_enqueue_logs
Especifica si las ubicaciones de origen de los métodos que colocan trabajos en segundo plano en cola deben registrarse debajo de las líneas de registro de cola relevantes. Por defecto, la bandera es true
en desarrollo y false
en todos los demás entornos.
3.15.10 config.active_job.retry_jitter
Controla la cantidad de "jitter" (variación aleatoria) aplicada al tiempo de espera calculado al reintentar trabajos fallidos.
El valor predeterminado depende de la versión objetivo de config.load_defaults
:
Comenzando con la versión | El valor predeterminado es |
---|---|
(original) | 0.0 |
6.1 | 0.15 |
3.15.11 config.active_job.log_query_tags_around_perform
Determina si el contexto de trabajo para las etiquetas de consulta se actualizará automáticamente a través de un around_perform
. El valor predeterminado es true
.
3.16 Configuración de Action Cable
3.16.1 config.action_cable.url
Acepta una cadena para la URL donde está alojando su servidor de Action Cable. Utilizaría esta opción si está ejecutando servidores de Action Cable que están separados de su aplicación principal.
3.16.2 config.action_cable.mount_path
Acepta una cadena para donde montar Action Cable, como parte del proceso del servidor principal. Por defecto es /cable
. Puede establecer esto como nil para no montar Action Cable como parte de su servidor Rails normal.
Puede encontrar opciones de configuración más detalladas en el Resumen de Action Cable.
3.16.3 config.action_cable.precompile_assets
Determina si los activos de Action Cable deben agregarse a la precompilación del pipeline de activos. No tiene efecto si no se utiliza Sprockets. El valor predeterminado es true
.
3.17 Configuración de Active Storage
config.active_storage
proporciona las siguientes opciones de configuración:
3.17.1 config.active_storage.variant_processor
Acepta un símbolo :mini_magick
o :vips
, especificando si las transformaciones de variantes y el análisis de blobs se realizarán con MiniMagick o ruby-vips.
El valor predeterminado depende de la versión objetivo de config.load_defaults
:
Comenzando con la versión | El valor predeterminado es |
---|---|
(original) | :mini_magick |
7.0 | :vips |
3.17.2 config.active_storage.analyzers
Acepta una matriz de clases que indica los analizadores disponibles para los blobs de Active Storage. Por defecto, esto está definido como:
config.active_storage.analyzers = [ActiveStorage::Analyzer::ImageAnalyzer::Vips, ActiveStorage::Analyzer::ImageAnalyzer::ImageMagick, ActiveStorage::Analyzer::VideoAnalyzer, ActiveStorage::Analyzer::AudioAnalyzer]
Los analizadores de imágenes pueden extraer el ancho y la altura de un blob de imagen; el analizador de video puede extraer el ancho, la altura, la duración, el ángulo, la relación de aspecto y la presencia/ausencia de canales de video/audio de un blob de video; el analizador de audio puede extraer la duración y la tasa de bits de un blob de audio.
3.17.3 config.active_storage.previewers
Acepta una matriz de clases que indica los previsualizadores de imágenes disponibles en los blobs de Active Storage. Por defecto, esto está definido como:
config.active_storage.previewers = [ActiveStorage::Previewer::PopplerPDFPreviewer, ActiveStorage::Previewer::MuPDFPreviewer, ActiveStorage::Previewer::VideoPreviewer]
PopplerPDFPreviewer
y MuPDFPreviewer
pueden generar una miniatura de la primera página de un blob PDF; VideoPreviewer
del cuadro relevante de un blob de video.
3.17.4 config.active_storage.paths
Acepta un hash de opciones que indica las ubicaciones de los comandos del previsualizador/analizador. El valor predeterminado es {}
, lo que significa que los comandos se buscarán en la ruta predeterminada. Puede incluir cualquiera de estas opciones:
:ffprobe
- La ubicación del ejecutable ffprobe.:mutool
- La ubicación del ejecutable mutool.:ffmpeg
- La ubicación del ejecutable ffmpeg.
config.active_storage.paths[:ffprobe] = '/usr/local/bin/ffprobe'
3.17.5 config.active_storage.variable_content_types
Acepta una matriz de cadenas que indica los tipos de contenido que Active Storage puede transformar a través del procesador de variantes. Por defecto, esto está definido como:
config.active_storage.variable_content_types = %w(image/png image/gif image/jpeg image/tiff image/bmp image/vnd.adobe.photoshop image/vnd.microsoft.icon image/webp image/avif image/heic image/heif)
3.17.6 config.active_storage.web_image_content_types
Acepta una matriz de cadenas consideradas como tipos de contenido de imágenes web en las que las variantes pueden procesarse sin convertirse al formato PNG de respaldo. Por ejemplo, si desea utilizar variantes AVIF
en su aplicación, puede agregar image/avif
a esta matriz.
El valor predeterminado depende de la versión objetivo de config.load_defaults
:
Comenzando con la versión | El valor predeterminado es |
---|---|
(original) | %w(image/png image/jpeg image/gif) |
7.2 | %w(image/png image/jpeg image/gif image/webp) |
3.17.7 config.active_storage.content_types_to_serve_as_binary
Acepta una matriz de cadenas que indica los tipos de contenido que Active Storage siempre servirá como un archivo adjunto, en lugar de en línea. Por defecto, esto está definido como:
config.active_storage.content_types_to_serve_as_binary = %w(text/html image/svg+xml application/postscript application/x-shockwave-flash text/xml application/xml application/xhtml+xml application/mathml+xml text/cache-manifest)
3.17.8 config.active_storage.content_types_allowed_inline
Acepta una matriz de cadenas que indica los tipos de contenido que Active Storage permite servir en línea. Por defecto, esto está definido como:
config.active_storage.content_types_allowed_inline = %w(image/webp image/avif image/png image/gif image/jpeg image/tiff image/vnd.adobe.photoshop image/vnd.microsoft.icon application/pdf)
3.17.9 config.active_storage.queues.analysis
Acepta un símbolo que indica la cola de Active Job a usar para trabajos de análisis. Cuando esta opción es nil
, los trabajos de análisis se envían a la cola predeterminada de Active Job (ver config.active_job.default_queue_name
).
El valor predeterminado depende de la versión objetivo de config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
6.0 | :active_storage_analysis |
6.1 | nil |
3.17.10 config.active_storage.queues.mirror
Acepta un símbolo que indica la cola de Active Job a usar para trabajos de duplicación de carga directa. Cuando esta opción es nil
, los trabajos de duplicación se envían a la cola predeterminada de Active Job (ver config.active_job.default_queue_name
). El valor predeterminado es nil
.
3.17.11 config.active_storage.queues.preview_image
Acepta un símbolo que indica la cola de Active Job a usar para la preprocesamiento de vistas previas de imágenes. Cuando esta opción es nil
, los trabajos se envían a la cola predeterminada de Active Job (ver config.active_job.default_queue_name
). El valor predeterminado es nil
.
3.17.12 config.active_storage.queues.purge
Acepta un símbolo que indica la cola de Active Job a usar para trabajos de purga. Cuando esta opción es nil
, los trabajos de purga se envían a la cola predeterminada de Active Job (ver config.active_job.default_queue_name
).
El valor predeterminado depende de la versión objetivo de config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
6.0 | :active_storage_purge |
6.1 | nil |
3.17.13 config.active_storage.queues.transform
Acepta un símbolo que indica la cola de Active Job a usar para la preprocesamiento de variantes. Cuando esta opción es nil
, los trabajos se envían a la cola predeterminada de Active Job (ver config.active_job.default_queue_name
). El valor predeterminado es nil
.
3.17.14 config.active_storage.logger
Puede usarse para establecer el logger utilizado por Active Storage. Acepta un logger que cumpla con la interfaz de Log4r o la clase predeterminada Ruby Logger.
config.active_storage.logger = ActiveSupport::Logger.new(STDOUT)
3.17.15 config.active_storage.service_urls_expire_in
Determina el vencimiento predeterminado de las URLs generadas por:
ActiveStorage::Blob#url
ActiveStorage::Blob#service_url_for_direct_upload
ActiveStorage::Preview#url
ActiveStorage::Variant#url
El valor predeterminado es 5 minutos.
3.17.16 config.active_storage.urls_expire_in
Determina el vencimiento predeterminado de las URLs en la aplicación Rails generadas por Active Storage. El valor predeterminado es nil.
3.17.17 config.active_storage.touch_attachment_records
Indica a ActiveStorage::Attachments que toque su registro correspondiente cuando se actualice. El valor predeterminado es verdadero.
3.17.18 config.active_storage.routes_prefix
Puede usarse para establecer el prefijo de ruta para las rutas servidas por Active Storage. Acepta una cadena que se antepondrá a las rutas generadas.
config.active_storage.routes_prefix = '/files'
El valor predeterminado es /rails/active_storage
.
3.17.19 config.active_storage.track_variants
Determina si las variantes se registran en la base de datos.
El valor predeterminado depende de la versión objetivo de config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | false |
6.1 | true |
3.17.20 config.active_storage.draw_routes
Puede usarse para alternar la generación de rutas de Active Storage. El valor predeterminado es true
.
3.17.21 config.active_storage.resolve_model_to_route
Puede usarse para cambiar globalmente cómo se entregan los archivos de Active Storage.
Valores permitidos son:
:rails_storage_redirect
: Redirigir a URLs de servicio firmadas y de corta duración.:rails_storage_proxy
: Proxiar archivos descargándolos.
El valor predeterminado es :rails_storage_redirect
.
3.17.22 config.active_storage.video_preview_arguments
Puede usarse para alterar la forma en que ffmpeg genera imágenes de vista previa de video.
El valor predeterminado depende de la versión objetivo de config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | "-y -vframes 1 -f image2" |
7.0 | "-vf 'select=eq(n\\,0)+eq(key\\,1)+gt(scene\\,0.015)" 1 + ",loop=loop=-1:size=2,trim=start_frame=1'" 2+ " -frames:v 1 -f image2"
|
3.17.23 config.active_storage.multiple_file_field_include_hidden
En Rails 7.1 y más allá, las relaciones has_many_attached
de Active Storage
por defecto reemplazarán la colección actual en lugar de agregar a ella. Por lo tanto,
para admitir la presentación de una colección vacía, cuando multiple_file_field_include_hidden
es true
, el file_field
helper renderizará un campo oculto auxiliar, similar al campo auxiliar
renderizado por el check_box
helper.
El valor predeterminado depende de la versión objetivo de config.load_defaults
:
A partir de la versión | El valor predeterminado es |
---|---|
(original) | false |
7.0 | true |
3.17.24 config.active_storage.precompile_assets
Determina si los activos de Active Storage deben agregarse a la precompilación del pipeline de activos. No
tiene efecto si no se utiliza Sprockets. El valor predeterminado es true
.
3.18 Configuración de Action Text
3.18.1 config.action_text.attachment_tag_name
Acepta una cadena para la etiqueta HTML utilizada para envolver los archivos adjuntos. El valor predeterminado es "action-text-attachment"
.
3.18.2 config.action_text.sanitizer_vendor
Configura el sanitizador HTML utilizado por Action Text configurando ActionText::ContentHelper.sanitizer
a una instancia de la clase devuelta por el método .safe_list_sanitizer
del proveedor. El valor predeterminado depende de la versión objetivo de config.load_defaults
:
A partir de la versión | El valor predeterminado es | Que analiza el marcado como |
---|---|---|
(original) | Rails::HTML4::Sanitizer |
HTML4 |
7.1 | Rails::HTML5::Sanitizer (ver NOTA) |
HTML5 |
NOTA: Rails::HTML5::Sanitizer
no es compatible con JRuby, por lo que en plataformas JRuby Rails volverá a Rails::HTML4::Sanitizer
.
3.19 Configuración de una Base de Datos
Casi todas las aplicaciones Rails interactuarán con una base de datos. Puede conectarse a la base de datos configurando una variable de entorno ENV['DATABASE_URL']
o usando un archivo de configuración llamado config/database.yml
.
Usando el archivo config/database.yml
puede especificar toda la información necesaria para acceder a su base de datos:
development:
adapter: postgresql
database: blog_development
pool: 5
Esto se conectará a la base de datos llamada blog_development
usando el adaptador postgresql
. Esta misma información puede almacenarse en una URL y proporcionarse a través de una variable de entorno de esta manera:
ENV['DATABASE_URL'] # => "postgresql://localhost/blog_development?pool=5"
El archivo config/database.yml
contiene secciones para tres entornos diferentes en los que Rails puede ejecutarse por defecto:
- El entorno
development
se utiliza en su computadora de desarrollo/local mientras interactúa manualmente con la aplicación. - El entorno
test
se utiliza al ejecutar pruebas automatizadas. - El entorno
production
se utiliza cuando despliega su aplicación para que el mundo la use.
Si lo desea, puede especificar manualmente una URL dentro de su config/database.yml
development:
url: postgresql://localhost/blog_development?pool=5
El archivo config/database.yml
puede contener etiquetas ERB <%= %>
. Cualquier cosa dentro de las etiquetas se evaluará como código Ruby. Puede usar esto para extraer datos de una variable de entorno o para realizar cálculos para generar la información de conexión necesaria.
Cuando se usa un ENV['DATABASE_URL']
o una clave url
en su archivo config/database.yml
, Rails permite mapear el protocolo en la URL a un adaptador de base de datos que puede configurarse desde dentro de la aplicación. Esto permite que el adaptador se configure sin modificar la URL establecida en el entorno de despliegue. Ver: config.active_record.protocol_adapters
.
CONSEJO: No tiene que actualizar manualmente las configuraciones de la base de datos. Si observa las opciones del generador de aplicaciones, verá que una de las opciones se llama --database
. Esta opción le permite elegir un adaptador de una lista de las bases de datos relacionales más utilizadas. Incluso puede ejecutar el generador repetidamente: cd .. && rails new blog --database=mysql
. Cuando confirme la sobrescritura del archivo config/database.yml
, su aplicación se configurará para MySQL en lugar de SQLite. A continuación se muestran ejemplos detallados de las conexiones de bases de datos comunes.
3.20 Preferencia de Conexión
Dado que hay dos formas de configurar su conexión (usando config/database.yml
o usando una variable de entorno), es importante entender cómo pueden interactuar.
Si tiene un archivo config/database.yml
vacío pero su ENV['DATABASE_URL']
está presente, entonces Rails se conectará a la base de datos a través de su variable de entorno:
$ cat config/database.yml
$ echo $DATABASE_URL
postgresql://localhost/my_database
Si tiene un config/database.yml
pero no ENV['DATABASE_URL']
, entonces este archivo se usará para conectarse a su base de datos:
$ cat config/database.yml
development:
adapter: postgresql
database: my_database
host: localhost
$ echo $DATABASE_URL
Si tiene tanto config/database.yml
como ENV['DATABASE_URL']
configurados, entonces Rails combinará la configuración. Para entender mejor esto, debemos ver algunos ejemplos.
Cuando se proporciona información de conexión duplicada, la variable de entorno tendrá prioridad:
$ cat config/database.yml
development:
adapter: sqlite3
database: NOT_my_database
host: localhost
$ echo $DATABASE_URL
postgresql://localhost/my_database
$ bin/rails runner 'puts ActiveRecord::Base.configurations.inspect'
#<ActiveRecord::DatabaseConfigurations:0x00007fc8eab02880 @configurations=[
#<ActiveRecord::DatabaseConfigurations::UrlConfig:0x00007fc8eab020b0
@env_name="development", @spec_name="primary",
@config={"adapter"=>"postgresql", "database"=>"my_database", "host"=>"localhost"}
@url="postgresql://localhost/my_database">
]
Aquí, el adaptador, el host y la base de datos coinciden con la información en ENV['DATABASE_URL']
.
Si se proporciona información no duplicada, obtendrá todos los valores únicos, la variable de entorno todavía tiene prioridad en casos de conflictos.
$ cat config/database.yml
development:
adapter: sqlite3
pool: 5
$ echo $DATABASE_URL
postgresql://localhost/my_database
$ bin/rails runner 'puts ActiveRecord::Base.configurations.inspect'
#<ActiveRecord::DatabaseConfigurations:0x00007fc8eab02880 @configurations=[
#<ActiveRecord::DatabaseConfigurations::UrlConfig:0x00007fc8eab020b0
@env_name="development", @spec_name="primary",
@config={"adapter"=>"postgresql", "database"=>"my_database", "host"=>"localhost", "pool"=>5}
@url="postgresql://localhost/my_database">
]
Dado que pool no está en la información de conexión proporcionada por ENV['DATABASE_URL']
, su información se fusiona. Dado que adapter
es duplicado, la información de conexión de ENV['DATABASE_URL']
gana.
La única forma de no usar explícitamente la información de conexión en ENV['DATABASE_URL']
es especificar una conexión URL explícita usando la subclave "url"
:
$ cat config/database.yml
development:
url: sqlite3:NOT_my_database
$ echo $DATABASE_URL
postgresql://localhost/my_database
$ bin/rails runner 'puts ActiveRecord::Base.configurations.inspect'
#<ActiveRecord::DatabaseConfigurations:0x00007fc8eab02880 @configurations=[
#<ActiveRecord::DatabaseConfigurations::UrlConfig:0x00007fc8eab020b0
@env_name="development", @spec_name="primary",
@config={"adapter"=>"sqlite3", "database"=>"NOT_my_database"}
@url="sqlite3:NOT_my_database">
]
Aquí, la información de conexión en ENV['DATABASE_URL']
se ignora, observe el diferente adaptador y nombre de la base de datos.
Dado que es posible incrustar ERB en su config/database.yml
, es mejor práctica mostrar explícitamente que está utilizando ENV['DATABASE_URL']
para conectarse a su base de datos. Esto es especialmente útil en producción, ya que no debe comprometer secretos como su contraseña de base de datos en su control de versiones (como Git).
$ cat config/database.yml
production:
url: <%= ENV['DATABASE_URL'] %>
Ahora el comportamiento es claro, que solo estamos usando la información de conexión en ENV['DATABASE_URL']
.
3.20.1 Configuración de una Base de Datos SQLite3
Rails viene con soporte incorporado para SQLite3, que es una aplicación de base de datos ligera sin servidor. Si bien un entorno de producción ocupado puede sobrecargar SQLite, funciona bien para el desarrollo y las pruebas. Rails por defecto utiliza una base de datos SQLite al crear un nuevo proyecto, pero siempre puede cambiarlo más tarde.
Aquí está la sección del archivo de configuración predeterminado (config/database.yml
) con información de conexión para el entorno de desarrollo:
development:
adapter: sqlite3
database: storage/development.sqlite3
pool: 5
timeout: 5000
NOTA: Rails utiliza una base de datos SQLite3 para el almacenamiento de datos por defecto porque es una base de datos de configuración cero que simplemente funciona. Rails también admite MySQL (incluido MariaDB) y PostgreSQL "de serie", y tiene complementos para muchos sistemas de bases de datos. Si está utilizando una base de datos en un entorno de producción, es muy probable que Rails tenga un adaptador para ella.
3.20.2 Configuración de una Base de Datos MySQL o MariaDB
Si elige usar MySQL o MariaDB en lugar de la base de datos SQLite3 proporcionada, su config/database.yml
se verá un poco diferente. Aquí está la sección de desarrollo:
development:
adapter: mysql2
encoding: utf8mb4
database: blog_development
pool: 5
username: root
password:
socket: /tmp/mysql.sock
Si su base de datos de desarrollo tiene un usuario root con una contraseña vacía, esta configuración debería funcionar para usted. De lo contrario, cambie el nombre de usuario y la contraseña en la sección development
según corresponda.
NOTA: Si su versión de MySQL es 5.5 o 5.6 y desea usar el conjunto de caracteres utf8mb4
por defecto, configure su servidor MySQL para admitir el prefijo de clave más largo habilitando la variable de sistema innodb_large_prefix
.
Las Bloqueos Asesoras están habilitadas por defecto en MySQL y se utilizan para hacer que las migraciones de bases de datos sean seguras de manera concurrente. Puede deshabilitar las bloqueos asesoras configurando advisory_locks
en false
:
production:
adapter: mysql2
advisory_locks: false
3.20.3 Configuración de una Base de Datos PostgreSQL
Si elige usar PostgreSQL, su config/database.yml
se personalizará para usar bases de datos PostgreSQL:
development:
adapter: postgresql
encoding: unicode
database: blog_development
pool: 5
Por defecto, Active Record utiliza características de base de datos como declaraciones preparadas y bloqueos asesoras. Es posible que deba deshabilitar esas características si está utilizando un agrupador de conexiones externo como PgBouncer:
production:
adapter: postgresql
prepared_statements: false
advisory_locks: false
Si está habilitado, Active Record creará hasta 1000
declaraciones preparadas por conexión de base de datos por defecto. Para modificar este comportamiento, puede establecer statement_limit
en un valor diferente:
production:
adapter: postgresql
statement_limit: 200
Cuantas más declaraciones preparadas se utilicen, más memoria requerirá su base de datos. Si su base de datos PostgreSQL está alcanzando límites de memoria, intente reducir statement_limit
o deshabilitar las declaraciones preparadas.
3.20.4 Configuración de una Base de Datos SQLite3 para la Plataforma JRuby
Si elige usar SQLite3 y está utilizando JRuby, su config/database.yml
se verá un poco diferente. Aquí está la sección de desarrollo:
development:
adapter: jdbcsqlite3
database: storage/development.sqlite3
3.20.5 Configuración de una Base de Datos MySQL o MariaDB para la Plataforma JRuby
Si elige usar MySQL o MariaDB y está utilizando JRuby, su config/database.yml
se verá un poco diferente. Aquí está la sección de desarrollo:
development:
adapter: jdbcmysql
database: blog_development
username: root
password:
3.20.6 Configuración de una Base de Datos PostgreSQL para la Plataforma JRuby
Si elige usar PostgreSQL y está utilizando JRuby, su config/database.yml
se verá un poco diferente. Aquí está la sección de desarrollo:
development:
adapter: jdbcpostgresql
encoding: unicode
database: blog_development
username: blog
password:
Cambie el nombre de usuario y la contraseña en la sección development
según corresponda.
3.20.7 Configuración del Almacenamiento de Metadatos
Por defecto, Rails almacenará información sobre su entorno Rails y esquema
en una tabla interna llamada ar_internal_metadata
.
Para desactivar esto por conexión, configure use_metadata_table
en su configuración de base de datos. Esto es útil cuando se trabaja con una base de datos compartida y/o un usuario de base de datos que no puede crear tablas.
development:
adapter: postgresql
use_metadata_table: false
3.20.8 Configuración del Comportamiento de Reintentos
Por defecto, Rails se volverá a conectar automáticamente al servidor de base de datos y reintentará ciertas consultas
si algo sale mal. Solo se reintentarán las consultas que se puedan volver a intentar de manera segura (idempotentes). El número
de reintentos se puede especificar en su configuración de base de datos a través de connection_retries
, o deshabilitarse
estableciendo el valor en 0. El número predeterminado de reintentos es 1.
development:
adapter: mysql2
connection_retries: 3
La configuración de la base de datos también permite configurar un retry_deadline
. Si se configura un retry_deadline
,
una consulta que de otro modo sería reintentar no se reintentará si ha transcurrido el tiempo especificado mientras se
intentaba por primera vez. Por ejemplo, un retry_deadline
de 5 segundos significa que si han pasado 5 segundos desde que se
intentó por primera vez una consulta, no se reintentará la consulta, incluso si es idempotente y quedan connection_retries
.
Este valor por defecto es nil, lo que significa que todas las consultas reintentables se reintentan independientemente del tiempo transcurrido. El valor de esta configuración debe especificarse en segundos.
development:
adapter: mysql2
retry_deadline: 5 # Dejar de reintentar consultas después de 5 segundos
3.20.9 Configuración de la Caché de Consultas
Por defecto, Rails almacena automáticamente en caché los conjuntos de resultados devueltos por las consultas. Si Rails encuentra la misma consulta nuevamente para esa solicitud o trabajo, utilizará el conjunto de resultados en caché en lugar de ejecutar la consulta contra la base de datos nuevamente.
La caché de consultas se almacena en memoria, y para evitar usar demasiada memoria, automáticamente elimina las consultas menos
utilizadas recientemente al alcanzar un umbral. Por defecto, el umbral es 100
, pero puede configurarse en el database.yml
.
development:
adapter: mysql2
query_cache: 200
Para desactivar completamente la caché de consultas, se puede establecer en false
development:
adapter: mysql2
query_cache: false
3.21 Creación de Entornos Rails
Por defecto, Rails viene con tres entornos: "development", "test" y "production". Aunque estos son suficientes para la mayoría de los casos de uso, hay circunstancias en las que se desean más entornos.
Imagine que tiene un servidor que refleja el entorno de producción pero que solo se utiliza para pruebas. Dicho servidor se llama comúnmente "servidor de staging". Para definir un entorno llamado "staging" para este servidor, simplemente cree un archivo llamado config/environments/staging.rb
. Dado que este es un entorno similar a producción, podría copiar el contenido de config/environments/production.rb
como punto de partida y realizar los cambios necesarios a partir de ahí. También es posible requerir y extender otras configuraciones de entorno de esta manera:
# config/environments/staging.rb
require_relative "production"
Rails.application.configure do
# Anulaciones de staging
end
Ese entorno no es diferente a los predeterminados, inicie un servidor con bin/rails server -e staging
, una consola con bin/rails console -e staging
, Rails.env.staging?
funciona, etc.
3.22 Despliegue en un Subdirectorio (raíz de URL relativa)
Por defecto, Rails espera que su aplicación se ejecute en la raíz
(por ejemplo, /
). Esta sección explica cómo ejecutar su aplicación dentro de un directorio.
Supongamos que queremos desplegar nuestra aplicación en "/app1". Rails necesita conocer este directorio para generar las rutas apropiadas:
config.relative_url_root = "/app1"
alternativamente, puede configurar la variable de entorno RAILS_RELATIVE_URL_ROOT
.
Rails ahora antepondrá "/app1" al generar enlaces.
3.22.1 Usando Passenger
Passenger facilita la ejecución de su aplicación en un subdirectorio. Puede encontrar la configuración relevante en el manual de Passenger.
3.22.2 Usando un Proxy Inverso
Desplegar su aplicación utilizando un proxy inverso tiene ventajas definitivas sobre los despliegues tradicionales. Le permiten tener más control sobre su servidor al superponer los componentes requeridos por su aplicación.
Muchos servidores web modernos pueden utilizarse como un servidor proxy para equilibrar elementos de terceros, como servidores de caché o servidores de aplicaciones.
Un servidor de aplicaciones que puede utilizar es Unicorn para ejecutarse detrás de un proxy inverso.
En este caso, necesitaría configurar el servidor proxy (NGINX, Apache, etc.) para aceptar conexiones desde su servidor de aplicaciones (Unicorn). Por defecto, Unicorn escuchará conexiones TCP en el puerto 8080, pero puede cambiar el puerto o configurarlo para usar sockets en su lugar.
Puede encontrar más información en el readme de Unicorn y entender la filosofía detrás de él.
Una vez que haya configurado el servidor de aplicaciones, debe enviar solicitudes a él configurando su servidor web adecuadamente. Por ejemplo, su configuración de NGINX puede incluir:
upstream application_server {
server 0.0.0.0:8080;
}
server {
listen 80;
server_name localhost;
root /root/path/to/your_app/public;
try_files $uri/index.html $uri.html @app;
location @app {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://application_server;
}
# alguna otra configuración
}
Asegúrese de leer la documentación de NGINX para obtener la información más actualizada.
4 Configuraciones del Entorno Rails
Algunas partes de Rails también pueden configurarse externamente proporcionando variables de entorno. Las siguientes variables de entorno son reconocidas por varias partes de Rails:
ENV["RAILS_ENV"]
define el entorno Rails (producción, desarrollo, prueba, etc.) en el que se ejecutará Rails.ENV["RAILS_RELATIVE_URL_ROOT"]
es utilizado por el código de enrutamiento para reconocer URLs cuando despliega su aplicación en un subdirectorio.ENV["RAILS_CACHE_ID"]
yENV["RAILS_APP_VERSION"]
se utilizan para generar claves de caché expandidas en el código de caché de Rails. Esto le permite tener múltiples cachés separadas de la misma aplicación.
5 Uso de Archivos de Inicialización
Después de cargar el framework y cualquier gema en su aplicación, Rails se encarga de cargar inicializadores. Un inicializador es cualquier archivo Ruby almacenado en config/initializers
en su aplicación. Puede usar inicializadores para guardar configuraciones que deben realizarse después de que todos los frameworks y gemas estén cargados, como opciones para configurar configuraciones para estas partes.
Los archivos en config/initializers
(y cualquier subdirectorio de
config/initializers
) se ordenan y cargan uno por uno como parte del
inicializador load_config_initializers
.
Si un inicializador tiene código que depende de código en otro inicializador, puede
combinarlos en un solo inicializador en su lugar. Esto hace que las dependencias sean más
explícitas y puede ayudar a revelar nuevos conceptos dentro de su aplicación. Rails también
admite la numeración de nombres de archivo de inicializadores, pero esto puede llevar a cambios en los nombres de los archivos. Cargar explícitamente inicializadores con require
no se recomienda, ya que
causará que el inicializador se cargue dos veces.
NOTA: No hay garantía de que sus inicializadores se ejecuten después de todos los inicializadores de las gemas, por lo que cualquier código de inicialización que dependa de que una gema determinada haya sido inicializada debe ir en un bloque config.after_initialize
.
6 Ganchos de Carga
El código de Rails a menudo puede ser referenciado al cargar una aplicación. Rails es responsable del orden de carga de estos frameworks, por lo que cuando carga frameworks, como ActiveRecord::Base
, prematuramente está violando un contrato implícito que su aplicación tiene con Rails. Además, al cargar código como ActiveRecord::Base
al inicio de su aplicación, está cargando frameworks enteros que pueden ralentizar el tiempo de inicio y podrían causar conflictos con el orden de carga y el inicio de su aplicación.
Los ganchos de carga y configuración son la API que le permite engancharse en este proceso de inicialización sin violar el contrato de carga con Rails. Esto también mitigará la degradación del rendimiento de inicio y evitará conflictos.
6.1 Evitar Cargar Frameworks de Rails
Dado que Ruby es un lenguaje dinámico, algún código hará que se carguen diferentes frameworks de Rails. Tome este fragmento, por ejemplo:
ActiveRecord::Base.include(MyActiveRecordHelper)
Este fragmento significa que cuando se carga este archivo, encontrará ActiveRecord::Base
. Este encuentro hace que Ruby busque la definición de esa constante y la requiera. Esto hace que se cargue todo el framework de Active Record al inicio.
ActiveSupport.on_load
es un mecanismo que se puede utilizar para diferir la carga de código hasta que realmente se necesite. El fragmento anterior puede cambiarse a:
ActiveSupport.on_load(:active_record) do
include MyActiveRecordHelper
end
Este nuevo fragmento solo incluirá MyActiveRecordHelper
cuando ActiveRecord::Base
se cargue.
6.2 ¿Cuándo se llaman los Ganchos?
En el framework de Rails, estos ganchos se llaman cuando se carga una biblioteca específica. Por ejemplo, cuando se carga ActionController::Base
, se llama al gancho :action_controller_base
. Esto significa que todas las llamadas a ActiveSupport.on_load
con ganchos :action_controller_base
se llamarán en el contexto de ActionController::Base
(eso significa que self
será un ActionController::Base
).
6.3 Modificar Código para Usar Ganchos de Carga
Modificar el código generalmente es sencillo. Si tiene una línea de código que se refiere a un framework de Rails como ActiveRecord::Base
, puede envolver ese código en un gancho de carga.
Modificar llamadas a include
ActiveRecord::Base.include(MyActiveRecordHelper)
se convierte en
ActiveSupport.on_load(:active_record) do
# self se refiere a ActiveRecord::Base aquí,
# por lo que podemos llamar a .include
include MyActiveRecordHelper
end
Modificar llamadas a prepend
ActionController::Base.prepend(MyActionControllerHelper)
se convierte en
ActiveSupport.on_load(:action_controller_base) do
# self se refiere a ActionController::Base aquí,
# por lo que podemos llamar a .prepend
prepend MyActionControllerHelper
end
Modificar llamadas a métodos de clase
ActiveRecord::Base.include_root_in_json = true
se convierte en
ActiveSupport.on_load(:active_record) do
# self se refiere a ActiveRecord::Base aquí
self.include_root_in_json = true
end
6.4 Ganchos de Carga Disponibles
Estos son los ganchos de carga que puede usar en su propio código. Para engancharse en el proceso de inicialización de una de las siguientes clases, utilice el gancho disponible.
Clase | Gancho |
---|---|
ActionCable |
action_cable |
ActionCable::Channel::Base |
action_cable_channel |
ActionCable::Connection::Base |
action_cable_connection |
ActionCable::Connection::TestCase |
action_cable_connection_test_case |
ActionController::API |
action_controller_api |
ActionController::API |
action_controller |
ActionController::Base |
action_controller_base |
ActionController::Base |
action_controller |
ActionController::TestCase |
action_controller_test_case |
ActionDispatch::IntegrationTest |
action_dispatch_integration_test |
ActionDispatch::Response |
action_dispatch_response |
ActionDispatch::Request |
action_dispatch_request |
ActionDispatch::SystemTestCase |
action_dispatch_system_test_case |
ActionMailbox::Base |
action_mailbox |
ActionMailbox::InboundEmail |
action_mailbox_inbound_email |
ActionMailbox::Record |
action_mailbox_record |
ActionMailbox::TestCase |
action_mailbox_test_case |
ActionMailer::Base |
action_mailer |
ActionMailer::TestCase |
action_mailer_test_case |
ActionText::Content |
action_text_content |
ActionText::Record |
action_text_record |
ActionText::RichText |
action_text_rich_text |
ActionText::EncryptedRichText |
action_text_encrypted_rich_text |
ActionView::Base |
action_view |
ActionView::TestCase |
action_view_test_case |
ActiveJob::Base |
active_job |
ActiveJob::TestCase |
active_job_test_case |
ActiveModel::Model |
active_model |
ActiveRecord::Base |
active_record |
ActiveRecord::TestFixtures |
active_record_fixtures |
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter |
active_record_postgresqladapter |
ActiveRecord::ConnectionAdapters::Mysql2Adapter |
active_record_mysql2adapter |
ActiveRecord::ConnectionAdapters::TrilogyAdapter |
active_record_trilogyadapter |
ActiveRecord::ConnectionAdapters::SQLite3Adapter |
active_record_sqlite3adapter |
ActiveStorage::Attachment |
active_storage_attachment |
ActiveStorage::VariantRecord |
active_storage_variant_record |
ActiveStorage::Blob |
active_storage_blob |
ActiveStorage::Record |
active_storage_record |
ActiveSupport::TestCase |
active_support_test_case |
i18n |
i18n |
7 Eventos de Inicialización
Rails tiene 5 eventos de inicialización a los que puede engancharse (enumerados en el orden en que se ejecutan):
before_configuration
: Este se ejecuta cuando la clase de la aplicación hereda deRails::Application
enconfig/application.rb
. Antes de que se ejecute el cuerpo de la clase. Los motores pueden usar este gancho para ejecutar código antes de que la propia aplicación se configure.before_initialize
: Este se ejecuta directamente antes del proceso de inicialización de la aplicación con el inicializador:bootstrap_hook
cerca del comienzo del proceso de inicialización de Rails.to_prepare
: Se ejecuta después de que los inicializadores se ejecutan para todos los Railties (incluida la propia aplicación), pero antes de la carga ávida y de que se construya la pila de middleware. Más importante aún, se ejecutará en cada recarga de código endevelopment
, pero solo una vez (durante el inicio) enproduction
ytest
.before_eager_load
: Este se ejecuta directamente antes de que ocurra la carga ávida, 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
# el código de inicialización va aquí
end
end
end
Alternativamente, también puede hacerlo a través del método config
en el objeto Rails.application
:
Rails.application.config.before_initialize do
# el código de inicialización va aquí
end
ADVERTENCIA: Algunas partes de su aplicación, notablemente el enrutamiento, aún no están configuradas en el punto en que se llama al bloque after_initialize
.
7.1 Rails::Railtie#initializer
Rails tiene varios inicializadores que se ejecutan al inicio y que todos se definen utilizando el método initializer
de Rails::Railtie
. Aquí hay un ejemplo del inicializador set_helpers_path
de Action Controller:
initializer "action_controller.set_helpers_path" do |app|
ActionController::Helpers.helpers_path = app.helpers_paths
end
El método initializer
toma tres argumentos, siendo el primero el nombre del inicializador, el segundo un hash de opciones (no mostrado aquí) y el tercero un bloque. La clave :before
en el hash de opciones puede especificarse para indicar qué inicializador debe ejecutarse antes de este nuevo inicializador, y la clave :after
especificará qué inicializador ejecutar este inicializador después.
Los inicializadores definidos utilizando el método initializer
se ejecutarán en el orden en que se definen, con la excepción de aquellos que utilizan los métodos :before
o :after
.
ADVERTENCIA: Puede colocar su inicializador antes o después de cualquier otro inicializador en la cadena, siempre y cuando sea lógico. Supongamos que tiene 4 inicializadores llamados "uno" a "cuatro" (definidos en ese orden) y define "cuatro" para que vaya antes de "dos" pero después de "tres", eso simplemente no es lógico y Rails no podrá determinar el orden de su inicializador.
El argumento de bloque del método initializer
es la instancia de la propia aplicación, por lo que podemos acceder a la configuración en ella utilizando el método config
, como se hace en el ejemplo.
Debido a que Rails::Application
hereda de Rails::Railtie
(indirectamente), puede usar el método initializer
en config/application.rb
para definir inicializadores para la aplicación.
7.2 Inicializadores
A continuación se muestra una lista completa de todos los inicializadores que se encuentran en Rails en el orden en que se definen (y por lo tanto se ejecutan, a menos que se indique lo contrario).
load_environment_hook
: Sirve como marcador de posición para que:load_environment_config
pueda definirse para ejecutarse antes de él.load_active_support
: Requiereactive_support/dependencies
, que configura 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 logger (un objetoActiveSupport::BroadcastLogger
) 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 almacena 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 solo se ejecuta siconfig.enable_reloading
está configurado entrue
, utilizaActionDispatch::Callbacks.after
para eliminar las constantes que han sido referenciadas durante la solicitud del espacio de objetos para que se vuelvan a cargar durante la siguiente solicitud.bootstrap_hook
: Ejecuta todos los bloques configuradosbefore_initialize
.i18n.callbacks
: En el entorno de desarrollo, configura un callbackto_prepare
que llamará aI18n.reload!
si alguno de los locales ha cambiado desde la última solicitud. En producción, este callback solo se ejecutará en la primera solicitud.active_support.deprecation_behavior
: Configura el comportamiento de informe de deprecación 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 basada en la configuraciónconfig.time_zone
, que por defecto es "UTC".active_support.initialize_beginning_of_week
: Establece el comienzo de semana predeterminado para la aplicación basada en la configuraciónconfig.beginning_of_week
, que por defecto es:monday
.active_support.set_configs
: Configura Active Support utilizando las configuraciones enconfig.active_support
enviando los nombres de los métodos como configuradores aActiveSupport
y pasando los valores.action_dispatch.configure
: ConfiguraActionDispatch::Http::URL.tld_length
para que se establezca en 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 configuradores aActionView::Base
y pasando los valores.action_controller.assets_config
: Inicializaconfig.action_controller.assets_dir
al 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 parámetros fuertes paraActionController::Parameters
.action_controller.set_configs
: Configura Action Controller utilizando las configuraciones enconfig.action_controller
enviando los nombres de los métodos como configuradores aActionController::Base
y pasando los valores.action_controller.compile_config_methods
: Inicializa métodos para las configuraciones especificadas para que sean más rápidas de acceder.active_record.initialize_timezone
: EstableceActiveRecord::Base.time_zone_aware_attributes
entrue
, así comoActiveRecord::Base.default_timezone
en UTC. Cuando se leen atributos de la base de datos, se convertirán en 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 middleware para verificar migraciones pendientes.active_record.check_schema_cache_dump
: Carga el volcado de la caché del esquema si está configurado y disponible.active_record.warn_on_records_fetched_greater_than
: Habilita advertencias cuando las consultas devuelven grandes cantidades de registros.active_record.set_configs
: Configura Active Record utilizando las configuraciones enconfig.active_record
enviando los nombres de los métodos como configuradores aActiveRecord::Base
y pasando los valores.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 el tiempo tomado por las llamadas de Active Record para la solicitud al logger.active_record.set_reloader_hooks
: Restablece todas las conexiones recargables a la base de datos siconfig.enable_reloading
está configurado entrue
.active_record.add_watchable_files
: Agrega archivosschema.rb
ystructure.sql
a archivos que se pueden ver.active_job.logger
: EstableceActiveJob::Base.logger
- si aún no está configurado - enRails.logger
.active_job.set_configs
: Configura Active Job utilizando las configuraciones enconfig.active_job
enviando los nombres de los métodos como configuradores aActiveJob::Base
y pasando los valores.action_mailer.logger
: EstableceActionMailer::Base.logger
- si aún no está configurado - enRails.logger
.action_mailer.set_configs
: Configura Action Mailer utilizando las configuraciones enconfig.action_mailer
enviando los nombres de los métodos como configuradores aActionMailer::Base
y pasando los valores.action_mailer.compile_config_methods
: Inicializa métodos para las configuraciones especificadas para que sean más rápidas de acceder.set_load_path
: Este inicializador se ejecuta antes debootstrap_hook
. Agrega rutas especificadas porconfig.paths.load_paths
a$LOAD_PATH
. Y a menos que configureconfig.add_autoload_paths_to_load_path
enfalse
, también agregará todas las rutas de carga automática especificadas porconfig.autoload_paths
,config.eager_load_paths
,config.autoload_once_paths
.set_autoload_paths
: Este inicializador se ejecuta antes debootstrap_hook
. Agrega todos los subdirectorios deapp
y rutas especificadas porconfig.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 railties, incluidos los motores) y configura las rutas para la aplicación.add_locales
: Agrega los archivos enconfig/locales
(de la aplicación, railties y motores) aI18n.load_path
, haciendo disponibles las traducciones en estos archivos.add_view_paths
: Agrega el directorioapp/views
de la aplicación, railties y motores a la ruta de búsqueda de archivos de vista para la aplicación.add_mailer_preview_paths
: Agrega el directoriotest/mailers/previews
de la aplicación, railties y motores a la ruta de búsqueda de archivos de vista previa de correo para la aplicación.load_environment_config
: Este inicializador se ejecuta antes deload_environment_hook
. Carga el archivoconfig/environments
para el entorno actual.prepend_helpers_path
: Agrega el directorioapp/helpers
de la aplicación, railties y motores a la ruta de búsqueda de ayudantes para la aplicación.load_config_initializers
: Carga todos los archivos Ruby deconfig/initializers
en la aplicación, railties y motores. Los archivos en este directorio pueden usarse para guardar configuraciones que deben realizarse después de que se carguen todos los frameworks.engines_blank_point
: Proporciona un punto en la inicialización para engancharse si desea hacer algo antes de que se carguen los motores. Después de este punto, se ejecutan todos los inicializadores de railtie y motor.add_generator_templates
: Encuentra plantillas para generadores enlib/templates
para la aplicación, railties y motores, y las agrega a la configuraciónconfig.generators.templates
, que hará que las plantillas estén disponibles para que todos los generadores las referencien.ensure_autoload_once_paths_as_subset
: Asegura queconfig.autoload_once_paths
solo contenga rutas deconfig.autoload_paths
. Si contiene rutas adicionales, se lanzará una excepción.add_to_prepare_blocks
: El bloque para cada llamadaconfig.to_prepare
en la aplicación, un railtie o motor se agrega a los callbacksto_prepare
para Action Dispatch, que se ejecutarán por solicitud en desarrollo, o antes de la primera solicitud en producción.add_builtin_route
: Si la aplicación se está ejecutando en el entorno de desarrollo, esto agregará la ruta pararails/info/properties
a las rutas de la aplicación. Esta ruta proporciona la información detallada, como la versión de Rails y Ruby parapublic/index.html
en una aplicación Rails predeterminada.build_middleware_stack
: Construye la pila de middleware para la aplicación, devolviendo un objeto que tiene un métodocall
que toma un objeto de entorno de Rack para la solicitud.eager_load!
: Siconfig.eager_load
estrue
, ejecuta los ganchosconfig.before_eager_load
y luego llama aeager_load!
, que cargará todos losconfig.eager_load_namespaces
.finisher_hook
: Proporciona un gancho para después de que el proceso de inicialización de la aplicación esté completo, así como ejecutar todos los bloquesconfig.after_initialize
para la aplicación, railties y 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 entrue
.
8 Agrupación de Bases de Datos
Las conexiones de bases de datos de Active Record son gestionadas por ActiveRecord::ConnectionAdapters::ConnectionPool
que asegura que un grupo de conexiones sincronice la cantidad de acceso de hilos a un número limitado de conexiones de base de datos. Este límite por defecto es 5 y puede configurarse en database.yml
.
development:
adapter: sqlite3
database: storage/development.sqlite3
pool: 5
timeout: 5000
Dado que la agrupación de conexiones se maneja dentro de Active Record por defecto, todos los servidores de aplicaciones (Thin, Puma, Unicorn, etc.) deberían comportarse de la misma manera. El grupo de conexiones de la base de datos está inicialmente vacío. A medida que aumenta la demanda de conexiones, las creará hasta alcanzar el límite del grupo de conexiones.
Cualquier solicitud verificará una conexión la primera vez que requiera acceso a la base de datos. Al final de la solicitud, la verificará nuevamente. Esto significa que el espacio de conexión adicional estará disponible nuevamente para la siguiente solicitud en la cola.
Si intenta usar más conexiones de las disponibles, Active Record lo bloqueará y esperará una conexión del grupo. Si no puede obtener una conexión, se arrojará un error de tiempo de espera similar al que se muestra a continuación.
ActiveRecord::ConnectionTimeoutError - no se pudo obtener una conexión de base de datos en 5.000 segundos (esperó 5.000 segundos)
Si obtiene el error anterior, es posible que desee aumentar el tamaño del
grupo de conexiones incrementando la opción pool
en database.yml
.
NOTA. Si está ejecutando en un entorno multihilo, podría haber una posibilidad de que varios hilos accedan a múltiples conexiones simultáneamente. Por lo tanto, dependiendo de su carga de solicitud actual, podría muy bien tener múltiples hilos compitiendo por un número limitado de conexiones.
9 Configuración Personalizada
Puede configurar su propio código a través del objeto de configuración de Rails con
configuración personalizada bajo el espacio de nombres config.x
, o directamente en config
.
La diferencia clave entre estos dos es que debe usar config.x
si está definiendo configuraciones anidadas (ej: config.x.nested.hi
), y solo
config
para configuraciones de nivel único (ej: config.hello
).
config.x.payment_processing.schedule = :daily
config.x.payment_processing.retries = 3
config.super_debugger = true
Estos puntos de configuración están entonces disponibles a través del objeto de configuración:
Rails.configuration.x.payment_processing.schedule # => :daily
Rails.configuration.x.payment_processing.retries # => 3
Rails.configuration.x.payment_processing.not_set # => nil
Rails.configuration.super_debugger # => true
También puede usar Rails::Application.config_for
para cargar archivos de configuración completos:
# config/payment.yml
production:
environment: production
merchant_id: production_merchant_id
public_key: production_public_key
private_key: production_private_key
development:
environment: sandbox
merchant_id: development_merchant_id
public_key: development_public_key
private_key: development_private_key
# config/application.rb
module MyApp
class Application < Rails::Application
config.payment = config_for(:payment)
end
end
Rails.configuration.payment['merchant_id'] # => production_merchant_id o development_merchant_id
Rails::Application.config_for
admite una configuración shared
para agrupar configuraciones comunes. La configuración compartida se fusionará en la configuración del entorno.
# config/example.yml
shared:
foo:
bar:
baz: 1
development:
foo:
bar:
qux: 2
# entorno de desarrollo
Rails.application.config_for(:example)[:foo][:bar] #=> { baz: 1, qux: 2 }
10 Motores de Búsqueda Indexación
A veces, es posible que desee evitar que algunas páginas de su aplicación sean visibles
en sitios de búsqueda como Google, Bing, Yahoo o Duck Duck Go. Los robots que indexan
estos sitios primero analizarán el archivo http://your-site.com/robots.txt
para
saber qué páginas se les permite indexar.
Rails crea este archivo para usted dentro de la carpeta /public
. Por defecto, permite
a los motores de búsqueda indexar todas las páginas de su aplicación. Si desea bloquear
la indexación en todas las páginas de su aplicación, use esto:
User-agent: *
Disallow: /
Para bloquear solo páginas específicas, es necesario usar una sintaxis más compleja. Aprenda en la documentación oficial.
11 Monitor de Sistema de Archivos con Eventos
Si la gema listen está cargada, Rails utiliza un monitor de sistema de archivos con eventos para detectar cambios cuando la recarga está habilitada:
group :development do
gem "listen", "~> 3.5"
end
De lo contrario, en cada solicitud Rails recorrerá el árbol de la aplicación para verificar si algo ha cambiado.
En Linux y macOS no se necesitan gemas adicionales, pero se requieren algunas para *BSD y para Windows.
Tenga en cuenta que algunas configuraciones no son compatibles.
Comentarios
Se te anima a ayudar a mejorar la calidad de esta guía.
Por favor contribuye si ves algún error tipográfico o errores fácticos. Para comenzar, puedes leer nuestra sección de contribuciones a la documentación.
También puedes encontrar contenido incompleto o cosas que no están actualizadas. Por favor agrega cualquier documentación faltante para main. Asegúrate de revisar Guías Edge primero para verificar si los problemas ya están resueltos o no en la rama principal. Revisa las Guías de Ruby on Rails para estilo y convenciones.
Si por alguna razón detectas algo que corregir pero no puedes hacerlo tú mismo, por favor abre un issue.
Y por último, pero no menos importante, cualquier tipo de discusión sobre la documentación de Ruby on Rails es muy bienvenida en el Foro oficial de Ruby on Rails.