1 Locations for Initialization Code
Rails ofrece cuatro puntos estándar para colocar el código de inicialización:
config / application.rb
- Archivos de configuración específicos del entorno
- Inicializadores
- Después de los inicializadores
2 Running Code Before Rails
En el raro caso de que su aplicación necesite ejecutar algún código antes de que se cargue Rails, colóquelo encima de la llamada para require "rails/all"
en config/application.rb
.
3 Configuring Rails Components
En general, el trabajo de configurar Rails significa configurar los componentes de Rails, así como configurar Rails en sí. El archivo de configuración config/application.rb
y los archivos de configuración específicos del entorno (comoconfig/environment/production.rb
) le permiten especificar las distintas configuraciones que desea transferir a todos los componentes.
Por ejemplo, puede 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 la configuración a componentes individuales de Rails, puede hacerlo a través del mismo objeto config
enconfig / application.rb
:
config.active_record.schema_format = :ruby
Rails utilizará esa configuración en particular para configurar Active Record.
3.1 Rails General Configuration
Estos métodos de configuración deben llamarse en un objeto Rails::Railtie
, como una subclase deRails::Engine
o Rails::Application
.
-
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 marco en sí, los motores y todos los inicializadores de la aplicación enconfig/initializers
. Tenga en cuenta que este bloque _ se ejecutará para tareas de rake. Útil para configurar valores establecidos por otros inicializadores:config.after_initialize do ActionView::Base.sanitized_allowed_tags.delete 'div' end
config.asset_host
establece el host para los activos. Útil cuando las CDN se utilizan para alojar activos o cuando desea evitar las restricciones de simultaneidad integradas en los navegadores que utilizan diferentes alias de dominio. Versión más corta deconfig.action_controller.asset_host
.config.autoload_once_paths
acepta una serie de rutas desde las cuales Rails cargará automáticamente constantes que no se borrarán por solicitud. Relevante siconfig.cache_classes
esfalse
, que es el caso en el modo de desarrollo por defecto. De lo contrario, toda la carga automática ocurre solo una vez. Todos los elementos de esta matriz también deben estar enautoload_paths
. El valor predeterminado es una matriz vacía.config.autoload_paths
acepta una serie de rutas desde las cuales Rails cargará automáticamente las constantes. El valor predeterminado son todos los directorios enapp
. Ya no se recomienda ajustar esto. Consulta Autoloading and Reloading Constants.config.add_autoload_paths_to_load_path
dice si las rutas de carga automática deben agregarse a$ LOAD_PATH
. Esta marca estrue
por defecto, pero se recomienda establecerla enfalse
en el modo:zeitwerk
antes, enconfig/application.rb
. Zeitwerk usa rutas absolutas internamente, y las aplicaciones que se ejecutan en el modo:zeitwerk
no necesitanrequire_dependency
, por lo que los modelos, controladores, trabajos, etc.no necesitan estar en$ LOAD_PATH
. Establecer esto enfalse
evita que Ruby revise estos directorios al resolver llamadasrequire
con rutas relativas, y ahorra trabajo de Bootsnap y RAM, ya que no necesita construir un índice para ellos.config.cache_classes
controla si las clases y módulos de la aplicación deben recargarse o no si cambian. El valor predeterminado esfalse
en el modo de desarrollo ytrue
en el modo de producción. En el modotest
, el valor predeterminado esfalse
si Spring está instalado,true
en caso contrario.config.beginning_of_week
establece el comienzo de semana predeterminado para el solicitud. Acepta un día de la semana válido como símbolo (por ejemplo,:monday
).config.cache_store
configura qué almacén de caché se utilizará 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é. El valor predeterminado es:file_store
. Consulta Cache Stores para conocer las opciones de configuración por tienda.config.colorize_logging
especifica si se deben usar o no códigos de color ANSI al registrar información. El valor predeterminado estrue
.config.consider_all_requests_local
es una bandera. Si estrue
, cualquier error hará que se descargue información detallada de depuración en la respuesta HTTP, y el controladorRails::Info
mostrará el contexto de ejecución de la aplicación en/rails/info/properties
.true
de forma predeterminada en entornos de desarrollo y prueba, yfalse
en modo de producción. Para un control más detallado, establezca esto enfalse
e implementeshow_detailed_exceptions?
En los controladores para especificar qué solicitudes deben proporcionar información de depuración sobre errores.-
config.console
le permite establecer la clase que se usará como consola cuando ejecutebin/rails console
. Es mejor ejecutarlo en el bloqueconsole
:console do # this block is called only when running console, # so we can safely require pry here require "pry" config.console = Pry end
config.disable_sandbox
controla si alguien puede iniciar o no una consola en modo sandbox. Esto es útil para evitar una sesión de larga duración de la consola sandbox, que podría hacer que un servidor de base de datos se quede sin memoria. El valor predeterminado es falso.config.eager_load
cuando estrue
, ansioso carga todos losconfig.eager_load_namespaces
registrados. Esto incluye su aplicación, motores, marcos de Rails y cualquier otro espacio de nombres registrado.config.eager_load_namespaces
registra espacios de nombres que están ansiosos por cargar cuandoconfig.eager_load
estrue
. Todos los espacios de nombres de la lista deben responder al métodoeager_load!
.config.eager_load_paths
acepta una serie de rutas desde las cuales Rails cargará ansiosamente en el arranque si las clases de caché están habilitadas. Por defecto, todas las carpetas del directorioapp
de la aplicación.config.enable_dependency_loading
: cuando es verdadero, habilita la carga automática, incluso si la aplicación está ansiosamente cargada yconfig.cache_classes
se establece como verdadero. El valor predeterminado es falso.config.encoding
configura la codificación de toda la aplicación. Por defecto es UTF-8.config.exceptions_app
establece la aplicación de excepciones invocada por el middleware ShowException cuando ocurre una excepción. El valor predeterminado esActionDispatch::PublicExceptions.new(Rails.public_path)
.config.debug_exception_response_format
establece el formato utilizado en las respuestas cuando se producen errores en el modo de desarrollo. El valor predeterminado es:api
para aplicaciones solo API y:default
para aplicaciones normales.config.file_watcher
es la clase utilizada para detectar actualizaciones de archivos en el sistema de archivos cuandoconfig.reload_classes_only_on_change
estrue
. Rails se envía conActiveSupport::FileUpdateChecker
, el valor predeterminado, yActiveSupport::EventedFileUpdateChecker
(este depende de la gema listen). Las clases personalizadas deben cumplir con la APIActiveSupport::FileUpdateChecker
.config.filter_parameters
utilizado para filtrar los parámetros que no desea que se muestre en los registros, como contraseñas o tarjetas de crédito números. También filtra los valores sensibles de las columnas de la base de datos cuando se llama a "# inspeccionar" en un objeto de registro activo. Por defecto, Rails filtra las contraseñas agregandoRails.application.config.filter_parameters + = [: contraseña]
enconfig/initializers/filter_parameter_logging.rb
. El filtro de parámetros funciona mediante una expresión regular de coincidencia parcial.config.force_ssl
obliga a que todas las solicitudes se sirvan a través de HTTPS y establece" https: // "como protocolo predeterminado al generar URL. La aplicación de HTTPS es manejada por el middlewareActionDispatch::SSL
, que se puede configurar a través deconfig.ssl_options
- ver su documentación para detalles.config.log_formatter
define el formateador del registrador Rails. Esta opción tiene por defecto una instancia deActiveSupport::Logger::SimpleFormatter
para todos los modos. Si está configurando un valor paraconfig.logger
, debe pasar manualmente el valor de su formateador a su registrador antes de que se envuelva en una instancia deActiveSupport::TaggedLogging
, Rails no lo hará por usted.config.log_level
define la verbosidad del registrador Rails. Esta opción por defecto es: debug
para todos los entornos. Los niveles de registro disponibles son::debug
,: info
,: warn
,: error
,: fatal
y:unknown
.config.log_tags
acepta una lista de: métodos a los que responde el objetorequest
, unProc
que acepta el objetorequest
o algo que responde ato_s
. Esto facilita etiquetar líneas de registro con información de depuración como subdominio e identificación de solicitud, ambos muy útiles para depurar aplicaciones de producción multiusuario.-
config.logger
es el registrador que se utilizará paraRails.logger
y cualquier registro de Rails relacionado comoActiveRecord::Base.logger
. Por defecto, es una instancia deActiveSupport::TaggedLogging
que envuelve una instancia deActiveSupport::Logger
que genera un registro en el directoriolog/
. Puede suministrar un registrador personalizado, para obtener compatibilidad total debe seguir estas pautas:- Para admitir un formateador, debe asignar manualmente un formateador desde el valor
config.log_formatter
al registrador. - Para admitir registros etiquetados, la instancia de registro debe estar envuelta con
ActiveSupport::TaggedLogging
. - Para soportar el silenciamiento, el registrador debe incluir el módulo
ActiveSupport::LoggerSilence
. La claseActiveSupport::Logger
ya incluye estos módulos.
class MyLogger < ::Logger include ActiveSupport::LoggerSilence end mylogger = MyLogger.new(STDOUT) mylogger.formatter = config.log_formatter config.logger = ActiveSupport::TaggedLogging.new(mylogger)
- Para admitir un formateador, debe asignar manualmente un formateador desde el valor
config.middleware
le permite configurar el middleware de la aplicación. Esto se trata en profundidad en la sección Configuración de middleware a continuación.config.rake_eager_load
cuando estrue
, con ganas de cargar la aplicación al ejecutar tareas de Rake. El valor predeterminado esfalse
.config.reload_classes_only_on_change
habilita o deshabilita la recarga de clases solo cuando los archivos de seguimiento cambian. De forma predeterminada, rastrea todo en las rutas de carga automática y se establece entrue
. Siconfig.cache_classes
estrue
, esta opción se ignora.config.credentials.content_path
configura la ruta de búsqueda para las credenciales cifradas.config.credentials.key_path
configura la ruta de búsqueda para la clave de cifrado.secret_key_base
se utiliza para especificar una clave que permite que las sesiones de la aplicación se verifiquen con una clave segura conocida para evitar la manipulación. Las aplicaciones obtienen una clave generada aleatoriamente en entornos de prueba y desarrollo, otros entornos deben establecer una enconfig/credentials.yml.enc
.config.public_file_server.enabled
configura Rails para servir archivos estáticos desde el directorio público. Esta opción tiene el valor predeterminado detrue
, pero en el entorno de producción se establece enfalse
porque el software del servidor (por ejemplo, NGINX o Apache) que se utiliza para ejecutar la aplicación debe entregar archivos estáticos en su lugar. Si está ejecutando o probando su aplicación en modo de producción usando WEBrick (no se recomienda usar WEBrick en producción) configure la opción entrue
. De lo contrario, no podrá utilizar el almacenamiento en caché de la página ni solicitar archivos que existen en el directorio público.-
config.session_store
especifica qué clase usar para almacenar la sesión. Los valores posibles son:cookie_store
, que es el predeterminado,:mem_cache_store
y:disabled
. El último le dice a Rails que no se ocupe de las sesiones. Por defecto, un almacén de cookies con el nombre de la aplicación como clave de sesión. También se pueden especificar tiendas de sesiones personalizadas:config.session_store :my_custom_store
Esta tienda personalizada debe definirse como
ActionDispatch::Session::MyCustomStore
. config.time_zone
establece la zona horaria predeterminada para la aplicación y habilita el reconocimiento de la zona horaria para Active Record.-
config.autoloader
establece el modo de carga automática. Esta opción toma el valor predeterminado de:zeitwerk
si se especifica6.0
enconfig.load_defaults
. Las aplicaciones aún pueden usar el autocargador clásico estableciendo este valor en:classic
después de cargar los valores predeterminados del marco:config.load_defaults 6.0 config.autoloader = :classic
3.2 Configuring Assets
config.assets.enabled
una bandera que controla si el activo la canalización está habilitada. Se establece entrue
de forma predeterminada.config.assets.css_compressor
define el compresor CSS a utilizar. Está configurado por defecto porsass-rails
. El valor alternativo único en este momento es:yui
, que usa la gemayui-compressor
.config.assets.js_compressor
define el compresor de JavaScript a usar. Los valores posibles son:closures
,:uglifier
y:yui
que requieren el uso de las gemascloses-compiler
,uglifier
oyui-compressor
respectivamente.config.assets.gzip
un indicador que permite la creación de una versión con gzip de los activos compilados, junto con los activos que no lo son. Establecido entrue
de forma predeterminada.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.config.assets.precompile
le permite especificar activos adicionales (distintos deapplication.css
yapplication.js
) que se precompilarán cuando se ejecuterake assets:precompile
.config.assets.unknown_asset_fallback
le permite modificar el comportamiento de la canalización de activos cuando un activo no está en la canalización, si utiliza sprockets-rails 3.2.0 o más reciente. El valor predeterminado esfalse
.config.assets.prefix
define el prefijo desde donde se sirven los activos. El valor predeterminado es/assets
.config.assets.manifest
define la ruta completa que se utilizará para el archivo de manifiesto del precompilador de activos. Por defecto, el archivo llamadomanifest- <random>.json
en el directorioconfig.assets.prefix
dentro de la carpeta pública.config.assets.digest
habilita el uso de huellas digitales SHA256 en nombres de activos. Establecido entrue
de forma predeterminada.config.assets.debug
desactiva la concatenación y compresión de activos. Establecido entrue
de forma predeterminada endevelopment.rb
.config.assets.version
es una cadena de opciones que se utiliza en la generación de hash SHA256. Esto se puede cambiar para forzar la recompilación de todos los archivos.config.assets.compile
es un valor booleano que se puede usar para activar la compilación de Sprockets en vivo en producción.config.assets.logger
acepta un registrador conforme a la interfaz de Log4r o la clase predeterminada RubyLogger
. Por defecto es el mismo configurado enconfig.logger
. Establecerconfig.assets.logger
enfalse
desactivará el registro de activos servidos.config.assets.quiet
deshabilita el registro de solicitudes de activos. Establecido en "true" de forma predeterminada endevelopment.rb
.
3.3 Configuring Generators
Rails te 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 utilizar en este bloque es el siguiente:
-
assets
permite crear activos al generar un andamio. El valor predeterminado estrue
. -
force_plural
permite nombres de modelos en plural. El valor predeterminado esfalse
. -
helper
define si se generan o no ayudantes. El valor predeterminado estrue
. -
integration_tool
define qué herramienta de integración usar para generar pruebas de integración. El valor predeterminado es:test_unit
. -
system_tests
define qué herramienta de integración usar para generar pruebas del sistema. El valor predeterminado es:test_unit
. -
orm
define qué orm usar. El valor predeterminado esfalse
y utilizará Active Record de forma predeterminada. -
resource_controller
define qué generador usar para generar un controlador cuando se usabin/rails generate resource
. El valor predeterminado es:controller
. -
resource_route
define si se debe generar una definición de ruta de recursos o no. El valor predeterminado estrue
. -
scaffold_controller
diferente deresource_controller
, define qué generador usar para generar un controlador scaffold cuando se usabin/rails generate scaffold
. El valor predeterminado es:scaffold_controller
. -
stylesheets
activa el gancho para las hojas de estilo en los generadores. Se usa en Rails para cuando se ejecuta el generadorscaffold
, pero este gancho también se puede usar en otras generaciones. El valor predeterminado estrue
. -
stylesheet_engine
configura el motor de hojas de estilo (por ejemplo, sass) que se utilizará al generar activos. El valor predeterminado es:css
. -
scaffold_stylesheet
creascaffold.css
cuando se genera un recurso con scaffold. El valor predeterminado estrue
. -
test_framework
define qué marco de prueba usar. El valor predeterminado esfalse
y utilizará minitest de forma predeterminada. -
template_engine
define qué motor de plantillas usar, como ERB o Haml. El valor predeterminado es:erb
.
3.4 Configuring Middleware
Cada aplicación Rails viene con un conjunto estándar de middleware que usa en este orden en el entorno de desarrollo:
-
ActionDispatch::HostAuthorization
previene contra la revinculación de DNS y otros ataques de encabezado deHost
. 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"), # All IPv4 addresses.
IPAddr.new("::/0"), # All IPv6 addresses.
"localhost" # The localhost reserved domain.
]
En otros entornos, Rails.application.config.hosts
está vacío y no
Se realizarán las comprobaciones del encabezado Host
. Si quieres protegerte del encabezado
ataques a la producción, debe permitir manualmente los hosts permitidos
con:
Rails.application.config.hosts << "product.com"
El host de una solicitud se compara con las entradas hosts
con el caso
operador (#===
), que permite a hosts
admitir entradas de tipo Regexp
,
Proc
e IPAddr
, por nombrar algunos. Aquí hay un ejemplo con una expresión regular.
# Allow requests from subdomains like `www.product.com` and
# `beta1.product.com`.
Rails.application.config.hosts << /.*\.product\.com/
Se admite un caso especial que le permite permitir todos los subdominios:
-
ActionDispatch::SSL
obliga a que todas las solicitudes se atiendan mediante HTTPS. Habilitado siconfig.force_ssl
se establece entrue
. Las opciones pasadas a esto se pueden configurar configurandoconfig.ssl_options
. -
ActionDispatch::Static
se usa para servir activos estáticos. Deshabilitado siconfig.public_file_server.enabled
esfalso
. Establezcaconfig.public_file_server.index_name
si necesita servir un archivo de índice de directorio estático que no se llameindex
. Por ejemplo, para servirmain.html
en lugar deindex.html
para las solicitudes de directorio, establezcaconfig.public_file_server.index_name
en"main"
. -
ActionDispatch::Executor
permite la recarga de código seguro para subprocesos. Deshabilitado siconfig.allow_concurrency
esfalso
, lo que hace que se cargueRack::Lock
.Rack::Lock
envuelve la aplicación en mutex para que solo pueda ser llamada por un solo hilo a la vez. -
ActiveSupport::Cache::Strategy::LocalCache
sirve como un caché respaldado en memoria básica. Este caché no es seguro para subprocesos y está diseñado solo para servir como caché de memoria temporal para un solo subproceso. -
Rack::Runtime
establece un encabezadoX-Runtime
, que contiene el tiempo (en segundos) necesario para ejecutar la solicitud. -
Rails::Rack::Logger
notifica a los registros que la solicitud ha comenzado. Una vez completada la solicitud, elimina todos los registros. -
ActionDispatch::ShowExceptions
rescata cualquier excepción devuelta por la aplicación y muestra páginas de excepción agradables si la solicitud es local o siconfig.consider_all_requests_local
se establece entrue
. Siconfig.action_dispatch.show_exceptions
se establece enfalse
, las excepciones se generarán independientemente. -
ActionDispatch::RequestId
hace que un encabezado X-Request-Id único esté disponible para la respuesta y habilita el métodoActionDispatch::Request # uuid
. -
ActionDispatch::RemoteIp
busca ataques de suplantación de IP y obtiene unclient_ip
válido de los encabezados de las solicitudes. Configurable con las opcionesconfig.action_dispatch.ip_spoofing_check
yconfig.action_dispatch.trusted_proxies
. -
Rack::Sendfile
intercepta las respuestas cuyo cuerpo está siendo servido desde un archivo y lo reemplaza con un encabezado X-Sendfile específico del servidor. Configurable conconfig.action_dispatch.x_sendfile_header
. -
ActionDispatch::Callbacks
ejecuta las devoluciones de llamada preparadas antes de atender la solicitud. -
ActionDispatch::Cookies
establece cookies para la solicitud. -
ActionDispatch::Session::CookieStore
es responsable de almacenar la sesión en cookies. Se puede usar un middleware alternativo para esto cambiando elconfig.action_controller.session_store
a un valor alternativo. Además, las opciones pasadas a esto se pueden configurar usandoconfig.action_controller.session_options
. -
ActionDispatch::Flash
configura las teclasflash
. Solo disponible siconfig.action_controller.session_store
se establece en un valor. -
Rack::MethodOverride
permite que el método sea anulado si se estableceparams[:_ method]
. Este es el middleware que admite los tipos de métodos HTTP PATCH, PUT y DELETE. -
Rack::Head
convierte las solicitudes HEAD en solicitudes GET y las sirve como tal.
Además de este middleware habitual, 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 que otro.
ruby
config.middleware.insert_before Rack::Head, Magical::Unicorns
O puede insertar un middleware en la posición exacta utilizando índices. Por ejemplo, si desea insertar el middleware Magical::Unicorns
en la parte superior de la pila, puede hacerlo, así:
ruby
config.middleware.insert_before 0, Magical::Unicorns
También hay insert_after
que insertará un middleware tras otro:
config.middleware.insert_after Rack::Head, Magical::Unicorns
Los middlewares también se pueden cambiar y reemplazar por otros:
config.middleware.swap ActionController::Failsafe, Lifo::Failsafe
Los middlewares se pueden mover de un lugar a otro:
config.middleware.move_before ActionDispatch::Flash, Magical::Unicorns
Esto moverá el middleware Magical::Unicorns
antes
ActionDispatch::Flash
. También puede moverlo después de:
config.middleware.move_after ActionDispatch::Flash, Magical::Unicorns
También se pueden quitar de la pila por completo:
config.middleware.delete Rack::MethodOverride
3.5 Configuring i18n
Todas estas opciones de configuración se delegan a la biblioteca I18n
.
config.i18n.available_locales
define las configuraciones regionales disponibles permitidas para la aplicación. Por defecto, todas las claves de configuración regional que se encuentran en los archivos de configuración regional, generalmente solo:en
en una nueva aplicación.config.i18n.default_locale
establece la configuración regional predeterminada de una aplicación utilizada para i18n. El valor predeterminado es:en
.config.i18n.enforce_available_locales
asegura que todas las configuraciones regionales pasadas a través de i18n deben declararse en la listaavailable_locales
, generando una excepciónI18n::InvalidLocale
cuando se establece una configuración regional no disponible. El valor predeterminado estrue
. Se recomienda no deshabilitar esta opción a menos que sea muy necesario, ya que esto funciona como una medida de seguridad contra la configuración de una configuración regional no válida desde la entrada del usuario.config.i18n.load_path
establece la ruta que usa Rails para buscar archivos de configuración regional. Por defecto esconfig/locales/*.{Yml, rb}
.config.i18n.raise_on_missing_translations
determina si se debe generar un error por traducciones faltantes en controladores y vistas. Este valor predeterminado esfalse
.-
config.i18n.fallbacks
establece el comportamiento de reserva para las traducciones faltantes. Aquí hay 3 ejemplos de uso para esta opción:- Puede establecer la opción en
true
para usar la configuración regional predeterminada como alternativa, así:
config.i18n.fallbacks = true
- O puede establecer una serie de configuraciones regionales como reserva, así:
config.i18n.fallbacks = [:tr, :en]
- O puede establecer diferentes alternativas para las configuraciones regionales de forma individual. Por ejemplo, si desea utilizar
:tr
para:az
y:de
,:en
para:da
como alternativas, puede hacerlo así:
config.i18n.fallbacks = { az: :tr, da: [:de, :en] } #or config.i18n.fallbacks.map = { az: :tr, da: [:de, :en] }
- Puede establecer la opción en
3.6 Configuring Active Model
-
config.active_model.i18n_customize_full_message
es un valor booleano que controla si el formato de errorfull_message
puede anularse a nivel de atributo o modelo en los archivos de configuración regional. Esto esfalse
por defecto.
3.7 Configuring Active Record
config.active_record
incluye una variedad de opciones de configuración:
config.active_record.logger
acepta un registrador conforme a la interfaz de Log4r o la clase Ruby Logger predeterminada, que luego se pasa a cualquier nueva conexión de base de datos realizada. Puede recuperar este registrador llamando alogger
en una clase de modelo de Active Record o en una instancia de modelo de Active Record. Establezca ennil
para deshabilitar el registro.-
config.active_record.primary_key_prefix_type
le permite ajustar el nombre de las columnas de clave primaria. De forma predeterminada, Rails asume que las columnas de clave principal se denominanid
(y no es necesario establecer esta opción de configuración). Hay otras dos opciones:-
:table_name
sería la clave principal para la clase de clientecustomerid
. -
:table_name_with_underscore
sería la clave principal para la clase de clientecustomer_id
.
-
config.active_record.table_name_prefix
le permite establecer una cadena global para que se anteponga a los nombres de las tablas. Si establece esto ennorthwest_, la clase Cliente buscará
northwest_customers como su tabla. El valor predeterminado es una cadena vacía.config.active_record.table_name_suffix
le permite establecer una cadena global para agregarla a los nombres de las tablas. Si establece esto en_northwest
, la clase Customer buscarácustomers_northwest
como su tabla. El valor predeterminado es una cadena vacía.config.active_record.schema_migrations_table_name
le permite establecer una cadena para ser utilizada como el nombre de la tabla de migraciones de esquema.config.active_record.internal_metadata_table_name
le permite establecer una cadena para usar como el nombre de la tabla de metadatos interna.config.active_record.protected_environments
le permite establecer una serie de nombres de entornos donde las acciones destructivas deben prohibirse.config.active_record.pluralize_table_names
especifica si Rails buscará nombres de tablas en singular o plural en la base de datos. Si se establece entrue
(el valor predeterminado), la clase Cliente utilizará la tablacustomers
. Si se establece en falso, la clase Cliente utilizará la tablacustomer
.config.active_record.default_timezone
determina si usarTime.local
(si se establece en:local
) oTime.utc
(si se establece en:utc
) al extraer fechas y horas de la base de datos. El valor predeterminado es:utc
.config.active_record.schema_format
controla el formato para descargar el esquema de la base de datos en 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 sentencias SQL (potencialmente dependientes de la base de datos).config.active_record.error_on_ignored_order
especifica si se debe generar un error si se ignora el orden de una consulta durante una consulta por lotes. Las opciones sontrue
(generar error) ofalse
(advertir). El valor predeterminado esfalse
.config.active_record.timestamped_migrations
controla si las migraciones se numeran con números enteros en serie o con marcas de tiempo. El valor predeterminado estrue
, para usar marcas de tiempo, que se prefieren si hay varios desarrolladores trabajando en la misma aplicación.config.active_record.lock_optimistically
controla si Active Record usará bloqueo optimista y estrue
por defecto.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
.config.active_record.record_timestamps
es un valor booleano que controla si se produce o no la marca de tiempo de las operacionescreate
yupdate
en un modelo. El valor predeterminado estrue
.config.active_record.partial_writes
es un valor booleano y controla si se utilizan escrituras parciales o no (es decir, si las actualizaciones solo establecen atributos que están sucios). Tenga en cuenta que al usar escrituras parciales, también debe usar el bloqueo optimistaconfig.active_record.lock_optimistically
ya que las actualizaciones simultáneas pueden escribir atributos basadosen un estado de lectura posiblemente obsoleto. El valor predeterminado estrue
.config.active_record.maintain_test_schema
es un valor booleano que controla si Active Record debe intentar mantener el esquema de la base de datos de prueba actualizado condb/schema.rb
(odb/structure.sql
) cuando Ejecute sus pruebas. El valor predeterminado estrue
.config.active_record.dump_schema_after_migration
es una bandera que controla si debe ocurrir o no el volcado de esquema (db/schema.rb
odb/structure.sql
) cuando ejecuta migraciones. Esto se establece enfalse
enconfig/environment/production.rb
que es generado por Rails. los el valor predeterminado estrue
si no se establece esta configuración.config.active_record.dump_schemas
controla qué esquemas de base de datos se descargarán al llamar adb:structure:dump
. Las opciones son: schema_search_path
(el valor predeterminado) que vuelca los esquemas enumerados enschema_search_path
,:all
que siempre vuelca todos los esquemas independientemente delschema_search_path
, o una cadena de esquemas separados por comas.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ónbelongs_to
no es presente.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 devuelto si una consulta supera el umbral, se registra una advertencia. Esto se puede utilizar para Identificar consultas que puedan estar causando un exceso de memoria.config.active_record.index_nested_attribute_errors
permite errores para anidados Las relacioneshas_many
se mostrarán con un índice, así como el error. El valor predeterminado esfalse
.config.active_record.use_schema_cache_dump
permite a los usuarios obtener información de la caché del esquema dedb/schema_cache.yml
(generado porbin/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 estrue
.config.active_record.collection_cache_versioning
habilita la misma clave de caché para ser reutilizado cuando el objeto se almacena en caché de tipoActiveRecord::Relation
cambios moviendo la información volátil (máximo actualizado en y recuento) de la clave de caché de la relación en la versión de caché para admitir el reciclaje de la clave de caché. El valor predeterminado esfalse
.
El adaptador MySQL agrega una opción de configuración adicional:
-
ActiveRecord::ConnectionAdapters::Mysql2Adapter.emulate_booleans
controla si Active Record considerará todas las columnastinyint(1)
como booleanos. El valor predeterminado estrue
.
El adaptador de PostgreSQL agrega una opción de configuración adicional:
-
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.create_unlogged_tables
controla si las tablas de la base de datos creadas deben ser "unlogged", lo que puede acelerar mejora el rendimiento, pero agrega un riesgo de pérdida de datos si la base de datos falla. Es Se recomienda encarecidamente que no habilite esto en un entorno de producción. El valor predeterminado esfalse
en todos los entornos.
El volcador de esquemas agrega dos opciones de configuración adicionales:
ActiveRecord::SchemaDumper.ignore_tables
acepta una matriz de tablas que no deben incluirse en ningún archivo de esquema generado.ActiveRecord::SchemaDumper.fk_ignore_pattern
permite establecer una regular diferente expresión que se utilizará para decidir si el nombre de una clave externa debe ser volcado a db / schema.rb o no. De forma predeterminada, los nombres de claves externas que comienzan confk_rails_
no se exportan al volcado del esquema de la base de datos. El valor predeterminado es/ ^ fk_rails_ [0-9a-f] {10} $ /
.
3.8 Configuring Action Controller
config.action_controller
incluye una serie de opciones de configuración:
config.action_controller.asset_host
establece el host para los activos. Útil cuando las CDN se utilizan para alojar activos en lugar del servidor de aplicaciones en sí.config.action_controller.perform_caching
configura si la aplicación debe realizar las funciones de almacenamiento en caché proporcionadas por el componente Action Controller o no. Establecido enfalse
en modo de desarrollo,true
en producción. Si no se especifica, el valor predeterminado serátrue
.config.action_controller.default_static_extension
configura la extensión utilizada para las páginas en caché. El valor predeterminado es.html
.config.action_controller.include_all_helpers
configura si todos los ayudantes de vista están disponibles en todas partes o tienen el alcance del controlador correspondiente. Si se establece enfalse
, los métodos de "UsersHelper" solo están disponibles para las vistas representadas 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 entrue
ofalse
) es que todos los ayudantes de vista están disponibles para cada controlador.config.action_controller.logger
acepta un registrador conforme a la interfaz de Log4r o la clase Ruby Logger predeterminada, que luego se utiliza para registrar información desde Action Controller. Establezca ennil
para deshabilitar el registro.config.action_controller.request_forgery_protection_token
establece el nombre del parámetro del token para RequestForgery. Llamar aprotect_from_forgery
lo establece en:authentity_token
por defecto.config.action_controller.allow_forgery_protection
habilita o deshabilita la protección CSRF. De forma predeterminada, esfalse
en el modo de prueba ytrue
en todos los demás modos.config.action_controller.forgery_protection_origin_check
configura si el encabezado HTTPOrigin
debe ser verificado con el origen del sitio como una defensa CSRF adicional.config.action_controller.per_form_csrf_tokens
configura si los tokens CSRF solo son válidos para el método/acción para el que fueron generados.config.action_controller.default_protect_from_forgery
determina si se agrega protección contra falsificaciones enActionController::Base
. Esto es falso por defecto.config.action_controller.relative_url_root
se puede usar para decirle a Rails que está deploying to a subdirectory. El valor predeterminado esENV['RAILS_RELATIVE_URL_ROOT']
.config.action_controller.permit_all_parameters
establece todos los parámetros para que la asignación masiva sea permitida por defecto. El valor predeterminado esfalse
.config.action_controller.action_on_unpermitted_parameters
habilita el registro o genera una excepción si se encuentran parámetros que no están explícitamente permitidos. Establezca en:log
o:raise
para habilitar. El valor predeterminado es:log
en entornos de desarrollo y prueba, yfalse
en todos los demás entornos.config.action_controller.always_permitted_parameters
establece una lista de parámetros permitidos que están permitidos por defecto. Los valores predeterminados son['controlador', 'acción']
.-
config.action_controller.enable_fragment_cache_logging
determina si se registran las lecturas y escrituras de fragmentos de caché en formato detallado de la siguiente manera:Read fragment views/v1/2914079/v1/2914079/recordings/70182313-20160225015037000000/d0bdf2974e1ef6d31685c3b392ad0b74 (0.6ms) Rendered messages/_message.html.erb in 1.2 ms [cache hit] Write fragment views/v1/2914079/v1/2914079/recordings/70182313-20160225015037000000/3b4e249ac9d168c617e32e84b99218b5 (1.1ms) Rendered recordings/threads/_thread.html.erb in 1.5 ms [cache miss]
De forma predeterminada, se establece en
false
, lo que da como resultado el siguiente resultado: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 Configuring Action Dispatch
config.action_dispatch.session_store
establece el nombre de la tienda para los datos de la sesión. El valor predeterminado es:cookie_store
; otras opciones válidas incluyen:active_record_store
,:mem_cache_store
o el nombre de su propia clase personalizada.-
config.action_dispatch.default_headers
es un hash con encabezados HTTP que se establecen de forma predeterminada en cada respuesta. Por defecto, esto se define como:config.action_dispatch.default_headers = { 'X-Frame-Options' => 'SAMEORIGIN', 'X-XSS-Protection' => '1; mode=block', 'X-Content-Type-Options' => 'nosniff', 'X-Download-Options' => 'noopen', 'X-Permitted-Cross-Domain-Policies' => 'none', 'Referrer-Policy' => 'strict-origin-when-cross-origin' }
config.action_dispatch.default_charset
especifica el juego de caracteres predeterminado para todas las representaciones. El valor predeterminado esnil
.config.action_dispatch.tld_length
establece la longitud del TLD (dominio de nivel superior) para la aplicación. El valor predeterminado es1
.config.action_dispatch.ignore_accept_header
se usa para determinar si ignorar los encabezados de aceptación de una solicitud. El valor predeterminado esfalse
.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 configurar en 'X-Sendfile' para Apache.config.action_dispatch.http_auth_salt
establece el valor salt Auth HTTP. Defaults a'autenticación http'
.config.action_dispatch.signed_cookie_salt
establece el valor de sal de las cookies firmadas. El valor predeterminado es'encrypted cookie''
.config.action_dispatch.encrypted_cookie_salt
establece la sal de cookies encriptadas valor. Por defecto es'encrypted cookie'
.config.action_dispatch.encrypted_signed_cookie_salt
establece el valor de sal de cookies cifradas. El valor predeterminado es'signed encrypted cookie'
.config.action_dispatch.authenticated_encrypted_cookie_salt
establece el sal de cookie cifrada autenticada. El valor predeterminado es `autenticado cifrado cookie'
.config.action_dispatch.encrypted_cookie_cipher
establece el cifrado como utilizado para cookies encriptadas. Este valor predeterminado es "" aes-256-gcm "`.config.action_dispatch.signed_cookie_digest
establece el resumen como utilizado para cookies firmadas. Este valor predeterminado es "" SHA1 "`.config.action_dispatch.cookies_rotations
permite rotar secretos, cifrados y resúmenes de cookies cifradas y firmadas.config.action_dispatch.use_authenticated_cookie_encryption
controla si Las cookies firmadas y cifradas utilizan el cifrado AES-256-GCM o el cifrado AES-256-CBC más antiguo. Su valor predeterminado estrue
.config.action_dispatch.use_cookies_with_metadata
habilita la escritura cookies con el propósito y metadatos de caducidad incrustados. Su valor predeterminado estrue
.config.action_dispatch.perform_deep_munge
configura sideep_munge
el método debe realizarse en los parámetros. Consulta la Security Guide. para más información. Su valor predeterminado estrue
.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. Por defecto, esto se define como:
config.action_dispatch.rescue_responses = {
'ActionController::RoutingError' => :not_found,
'AbstractController::ActionNotFound' => :not_found,
'ActionController::MethodNotAllowed' => :method_not_allowed,
'ActionController::UnknownHttpMethod' => :method_not_allowed,
'ActionController::NotImplemented' => :not_implemented,
'ActionController::UnknownFormat' => :not_acceptable,
'ActionController::InvalidAuthenticityToken' => :unprocessable_entity,
'ActionController::InvalidCrossOriginRequest' => :unprocessable_entity,
'ActionDispatch::Http::Parameters::ParseError' => :bad_request,
'ActionController::BadRequest' => :bad_request,
'ActionController::ParameterMissing' => :bad_request,
'Rack::QueryParser::ParameterTypeError' => :bad_request,
'Rack::QueryParser::InvalidParameterError' => :bad_request,
'ActiveRecord::RecordNotFound' => :not_found,
'ActiveRecord::StaleObjectError' => :conflict,
'ActiveRecord::RecordInvalid' => :unprocessable_entity,
'ActiveRecord::RecordNotSaved' => :unprocessable_entity
}
Cualquier excepción que no esté configurada se asignará a 500 Internal Server Error.
config.action_dispatch.return_only_media_type_on_content_type
cambia el valor de retorno deActionDispatch::Response # content_type
al Content-Type encabezado sin modificación. El valor predeterminado esfalse
.ActionDispatch::Callbacks.before
toma un bloque de código para ejecutarse antes de la solicitud.ActionDispatch::Callbacks.after
toma un bloque de código para ejecutarse después de la solicitud.
3.10 Configuring Action View
config.action_view
incluye una pequeña cantidad de opciones de configuración:
config.action_view.cache_template_loading
controla si las plantillas se deben recargar o no en cada solicitud. Por defecto es lo que esté configurado paraconfig.cache_classes
.-
config.action_view.field_error_proc
proporciona un generador HTML para mostrar errores que provienen de Active Model. El valor predeterminado esProc.new do |html_tag, instance| %Q(<div class="field_with_errors">#{html_tag}</div>).html_safe end
config.action_view.default_form_builder
le dice a Rails qué creador de formularios debe utilizar de forma predeterminada. El valor predeterminado esActionView::Helpers::FormBuilder
. Si tu desea que su clase de constructor de formularios se cargue después de la inicialización (por lo que es recargado en cada solicitud en desarrollo), puede pasarlo como unaString
.config.action_view.logger
acepta un registrador que se ajusta a la interfaz de Log4r o la clase Ruby Logger predeterminada, que luego se usa para registrar información desde la Vista de acción. Establezca ennil
para deshabilitar el registro.config.action_view.erb_trim_mode
da el modo de recorte que utilizará ERB. El valor predeterminado es'-'
, que activa el recorte de los espacios de cola y la nueva línea cuando se usa<%= -%>
or<%= =%>
. Consulte la documentación de Erubis para obtener más información.config.action_view.embed_authenticity_token_in_remote_forms
le permite establezca el comportamiento predeterminado paraautenticity_token
en formularios conremote: true
. De forma predeterminada, se establece enfalse
, lo que significa que los formularios remotos no incluirauthenticity_token
, que es útil cuando se almacena en caché de fragmentos la forma. Los formularios remotos obtienen la autenticidad de la etiquetameta
, por lo que incrustar no es necesario a menos que admita navegadores sin JavaScript. En tal caso puede pasarauthenticity_token: true
como una opción de formulario o establecer esto config ajuste atrue
.-
config.action_view.prefix_partial_path_with_controller_namespace
determina si los parciales se buscan o no desde un subdirectorio en plantillas renderizadas desde controladores con espacio de nombres. Por ejemplo, considere un controlador llamadoAdmin::ArticlesController
que muestra esta plantilla:<%= render @article %>
La configuración predeterminada es
true
, que usa el parcial en/admin/articles/_article.erb
. Establecer el valor enfalse
generaría/articles/_article.erb
, que es el mismo comportamiento que la representación desde un controlador sin espacio de nombres comoArticlesController
. config.action_view.automatically_disable_submit_tag
determina sisubmit_tag
debería deshabilitarse automáticamente al hacer clic, este valor predeterminado estrue
.config.action_view.debug_missing_translation
determina si se envuelve la clave de traducción faltante en una etiqueta<span>
o no. Este valor predeterminado estrue
.config.action_view.form_with_generates_remote_forms
determina siform_with
genera formularios remotos o no. Este valor predeterminado estrue
.config.action_view.form_with_generates_ids
determina siform_with
genera identificadores en las entradas. Este valor predeterminado esfalse
.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. Este valor predeterminado esfalse
.config.action_view.annotate_rendered_view_with_filenames
determina si anotar la vista renderizada con nombres de archivo de plantilla. Este valor predeterminado esfalse
.
3.11 Configuring Action Mailbox
config.action_mailbox
proporciona las siguientes opciones de configuración:
-
config.action_mailbox.logger
contiene el registrador utilizado por Action Mailbox. Acepta un registrador conforme a la interfaz de Log4r o la clase Ruby Logger predeterminada. El predeterminado esRails.logger
.
config.action_mailbox.logger = ActiveSupport::Logger.new(STDOUT)
-
config.action_mailbox.incinerate_after
acepta unActiveSupport::Duration
que indica cuánto tiempo después de procesar los registrosActionMailbox::InboundEmail
deben ser destruidos. El valor predeterminado es30 días
.
# Incinerate inbound emails 14 days after processing.
config.action_mailbox.incinerate_after = 14.days
config.action_mailbox.queues.incineration
acepta un símbolo que indica la cola de trabajos activos que se utilizarán para los trabajos de incineración. Su valor predeterminado es:action_mailbox_incineration
.config.action_mailbox.queues.routing
acepta un símbolo que indica la cola de trabajos activos que se utilizará para enrutar trabajos. Su valor predeterminado es:action_mailbox_routing
.
3.12 Configuring Action Mailer
Hay una serie de configuraciones disponibles en config.action_mailer
:
config.action_mailer.logger
acepta un registrador conforme a la interfaz de Log4r o la clase predeterminada Ruby Logger, que luego se usa para registrar información de Action Mailer. Establezca ennil
para deshabilitar el registro.-
config.action_mailer.smtp_settings
permite la configuración detallada del método de entrega:smtp
. Acepta un hash de opciones, que puede incluir cualquiera de estas opciones:-
:address
- Le permite usar un servidor de correo remoto. Simplemente cámbielo de su configuración predeterminada "localhost". -
:port
- En caso de que su servidor de correo no se ejecute 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, configure la contraseña en esta configuración. -
:authentication
: si su servidor de correo requiere autenticación, debe especificar el tipo de autenticación aquí. Este es un símbolo y uno de:plain
,:login
,:cram_md5
. -
:enable_starttls_auto
: detecta si STARTTLS está habilitado en su servidor SMTP y comienza a usarlo. Su valor predeterminado estrue
. -
:openssl_verify_mode
- Al usar TLS, puede configurar cómo OpenSSL verifica el certificado. Esto es útil si necesita validar un certificado autofirmado y / o comodín. Puede ser una de las constantes de verificación de OpenSSL,:none
o:peer
- o la constante directamenteOpenSSL::SSL::VERIFY_NONE
oOpenSSL::SSL::VERIFY_PEER
, respectivamente. -
:ssl/:tls
: permite que la conexión SMTP utilice SMTP / TLS (SMTPS: SMTP sobre una conexión TLS directa).
-
-
config.action_mailer.sendmail_settings
permite la configuración detallada del método de entrega desendmail
. Acepta un hash de opciones, que puede incluir cualquiera de estas opciones:-
:location
: la ubicación del ejecutable de sendmail. Por defecto es/usr/sbin/sendmail
. -
:argumentos
- Los argumentos de la línea de comandos. El valor predeterminado es "-i".
-
config.action_mailer.raise_delivery_errors
especifica si generar un error si no se puede completar la entrega del correo electrónico. Su valor predeterminado estrue
.config.action_mailer.delivery_method
define el método de entrega y su valor predeterminado es:smtp
. Consulta la sección de configuración en la guía de Action Mailer para obtener más información.config.action_mailer.perform_deliveries
especifica si el correo se entregará realmente y es verdadero por defecto. Puede ser conveniente establecerlo enfalse
para realizar pruebas.-
config.action_mailer.default_options
configura los valores predeterminados de Action Mailer. Úselo para configurar opciones comofrom
oreply_to
para cada correo. Estos predeterminados a:mime_version: "1.0", charset: "UTF-8", content_type: "text/plain", parts_order: ["text/plain", "text/enriched", "text/html"]
Assign a hash to set additional options:
config.action_mailer.default_options = { from: "noreply@example.com" }
-
config.action_mailer.observers
registra observadores que serán notificados cuando se entregue el correo.config.action_mailer.observers = ["MailObserver"]
-
config.action_mailer.interceptors
registra los interceptores que serán llamados antes de que se envíe el correo.config.action_mailer.interceptors = ["MailInterceptor"]
-
config.action_mailer.preview_interceptors
registra los interceptores que serán llamados antes de que se obtenga una vista previa del correo.config.action_mailer.preview_interceptors = ["MyPreviewMailInterceptor"]
-
config.action_mailer.preview_path
especifica la ubicación de las vistas previas de correo.config.action_mailer.preview_path = "#{Rails.root}/lib/mailer_previews"
-
config.action_mailer.show_previews
habilitar o deshabilitar las vistas previas de correo. Por defecto, esto estrue
en desarrollo.config.action_mailer.show_previews = false
config.action_mailer.deliver_later_queue_name
especifica el nombre de la cola para mailers. Por defecto esto esmailers
.config.action_mailer.perform_caching
especifica si las plantillas de correo deben realizar el almacenamiento en caché de fragmentos o no. Si no se especifica, el valor predeterminado serátrue
.config.action_mailer.delivery_job
especifica el trabajo de entrega para el correo. Predeterminado aActionMailer::DeliveryJob
.
3.13 Configuring Active Support
Hay algunas opciones de configuración disponibles en Active Support:
config.active_support.bare
habilita o deshabilita la carga deactive_support/all
al arrancar Rails. El valor predeterminado esnil
, lo que significa queactive_support/all
está cargado.config.active_support.test_order
establece el orden en el que se ejecutan los casos de prueba. Los valores posibles son:random
y:sorted
. El valor predeterminado es:aleatorio
.config.active_support.escape_html_entities_in_json
habilita o deshabilita el escape de entidades HTML en la serialización JSON. El valor predeterminado estrue
.config.active_support.use_standard_json_time_format
habilita o deshabilita la serialización de fechas en formato ISO 8601. El valor predeterminado estrue
.config.active_support.time_precision
establece la precisión de los valores de tiempo codificados en JSON. El valor predeterminado es3
.config.active_support.use_sha1_digests
especifica si se debe utilizar SHA-1 en lugar de MD5 para generar resúmenes no sensibles, como el encabezado ETag. El valor predeterminado es falso.config.active_support.use_authenticated_message_encryption
especifica si se debe utilizar el cifrado autenticado AES-256-GCM como cifrado predeterminado para cifrar mensajes en lugar de AES-256-CBC. Esto es falso por defecto.ActiveSupport :: Logger.silencer
se establece enfalse
para deshabilitar la capacidad de silenciar el registro en un bloque. El valor predeterminado estrue
.ActiveSupport :: Cache :: Store.logger
especifica el registrador que se utilizará en las operaciones del almacén de caché.ActiveSupport :: Deprecation.behavior
establecedor alternativo aconfig.active_support.deprecation
que configura el comportamiento de las advertencias de obsolescencia para Rails.ActiveSupport :: Deprecation.disallowed_behavior
establecedor alternativo aconfig.active_support.disallowed_deprecation
que configura el comportamiento de las advertencias de desaprobación no permitidas para Rails.ActiveSupport :: Deprecation.disallowed_warnings
establecedor alternativo aconfig.active_support.disallowed_deprecation_warnings
que configura las advertencias de desaprobación que la Aplicación considera no permitidas. Esto permite, por ejemplo, que las depreciaciones específicas se traten como fallas graves.ActiveSupport :: Deprecation.silence
toma un bloque en el que se silencian todas las advertencias de obsolescencia.ActiveSupport :: Deprecation.silenced
establece si se muestran o no las advertencias de obsolescencia. El valor predeterminado esfalse
.
3.14 Configuring Active Job
config.active_job
proporciona las siguientes opciones de configuración:
-
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.# Be sure to have the adapter's gem in your Gemfile # and follow the adapter's specific installation # and deployment instructions. config.active_job.queue_adapter = :sidekiq
config.active_job.default_queue_name
se puede usar para cambiar el nombre de la cola predeterminado. De forma predeterminada, esto esdefault
.
config.active_job.default_queue_name = :medium_priority
```
* `config.active_job.queue_name_prefix` Le permite establecer un prefijo de nombre de cola opcional, que no esté en blanco, para todos los trabajos. De forma predeterminada, está en blanco y no se utiliza.
La siguiente configuración pondría en cola el trabajo dado en la cola `production_high_priority` cuando se ejecuta en producción:
```ruby
config.active_job.queue_name_prefix = Rails.env
```
```ruby
class GuestsCleanupJob < ActiveJob::Base
queue_as :high_priority
#....
end
```
* `config.active_job.queue_name_delimiter` tiene un valor predeterminado de `'_'`. Si se establece `queue_name_prefix`, entonces `queue_name_delimiter` se une al prefijo y al nombre de la cola sin prefijo.
La siguiente configuración pondría en cola el trabajo proporcionado en la cola `video_server.low_priority`:
```ruby
# prefix must be set for delimiter to be used
config.active_job.queue_name_prefix = 'video_server'
config.active_job.queue_name_delimiter = '.'
```
```ruby
class EncoderJob < ActiveJob::Base
queue_as :low_priority
#....
end
```
* `config.active_job.logger` acepta un registrador que se ajusta a la interfaz de Log4r o la clase Ruby Logger predeterminada, que luego se usa para registrar información de Active Job. Puede recuperar este registrador llamando a `logger` en una clase de trabajo activo o en una instancia de trabajo activo. Establezca en `nil` para deshabilitar el registro.
* `config.active_job.custom_serializers` permite configurar serializadores de argumentos personalizados. Por defecto es `[]`.
* `config.active_job.return_false_on_aborted_enqueue` cambia el valor de retorno de `#enqueue` a falso en lugar de la instancia del trabajo cuando se aborta la puesta en cola. El valor predeterminado es `false`.
* `config.active_job.log_arguments` controla si los argumentos de un trabajo están registrados. El valor predeterminado es `true`.
* `config.active_job.retry_jitter` controla la cantidad de" jitter "(variación aleatoria) aplicada al tiempo de retardo calculado al reintentar trabajos fallidos. El valor predeterminado es `0,15`.
### Configuring Action Cable
* `config.action_cable.url` acepta una cadena para la URL donde
está alojando su servidor Action Cable. Usarías esta opción
si está ejecutando servidores Action Cable que están separados de su
aplicación principal.
* `config.action_cable.mount_path` acepta una cadena sobre dónde montar la acción
Cable, como parte del proceso del servidor principal. El valor predeterminado es `/cable`.
Puede configurar esto como nil para no montar Action Cable como parte de su
servidor normal de Rails.
Puede encontrar opciones de configuración más detalladas en el
[Action Cable Overview](action_cable_overview.html#configuration).
### Configuring Active Storage
`config.active_storage` proporciona las siguientes opciones de configuración:
* `config.active_storage.variant_processor` acepta un símbolo `:mini_magick` o `:vips`, especificando si las transformaciones variantes se realizarán con MiniMagick o ruby-vips. El valor predeterminado es `:mini_magick`.
* `config.active_storage.analyzers` acepta una matriz de clases que indican los analizadores disponibles para los blobs de Active Storage. El valor predeterminado es `[ActiveStorage::Analyzer::ImageAnalyzer, ActiveStorage::Analyzer::VideoAnalyzer]`. El primero puede extraer el ancho y el alto de una mancha de imagen; este último puede extraer el ancho, alto, duración, ángulo y relación de aspecto de un blob de video.
* `config.active_storage.previewers` acepta una serie de clases que indican los previsualizadores de imágenes disponibles en los blobs de Active Storage. El valor predeterminado es `[ActiveStorage::Previewer::PopplerPDFPreviewer, ActiveStorage::Previewer::MuPDFPreviewer, ActiveStorage::Previewer::VideoPreviewer]`. `PopplerPDFPreviewer` y `MuPDFPreviewer` pueden generar una miniatura desde la primera página de un blob PDF; `VideoPreviewer` del fotograma relevante de un blob de vídeo.
* `config.active_storage.paths` acepta un hash de opciones que indican la ubicación de los comandos del analizador / vista previa. 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.
```ruby
config.active_storage.paths[:ffprobe] = '/usr/local/bin/ffprobe'
config.active_storage.variable_content_types
acepta una matriz de cadenas que indican los tipos de contenido que Active Storage puede transformar a través de ImageMagick. El valor predeterminado es%w(image/png image/gif image/jpg image/jpeg image/pjpeg image/tiff image/bmp image/vnd.adobe.photoshop image/vnd.microsoft.icon image/webp)
.config.active_storage.web_image_content_types
acepta una serie de cadenas consideradas como tipos de contenido de imágenes web en las que se pueden procesar variantes sin convertirlas al formato PNG de reserva. Si desea utilizar variantes deWebP
en su aplicación, puede agregarimage/webp
a esta matriz. El valor predeterminado es%w(image/png image/jpeg image/jpg image/gif)
.config.active_storage.content_types_to_serve_as_binary
acepta una matriz de cadenas que indican los tipos de contenido que Active Storage siempre servirá como un archivo adjunto, en lugar de en línea. El valor predeterminado es%w(texto/html text/javascript image/svg+xml application/postscript application/x-shockwave-flash text/xml application/xml application/xhtml+xml application/mathml+xml text/cache-manifest)
.config.active_storage.content_types_allowed_inline
acepta una matriz de cadenas que indican los tipos de contenido que Active Storage permite servir como en línea. El valor predeterminado es%w(image/png image/gif image/jpg image/jpeg image/vnd.adobe.photoshop image/vnd.microsoft.icon application/pdf)
.-
config.active_storage.queues.analysis
acepta un símbolo que indica la cola de trabajos activos que se utilizarán para los trabajos de análisis. Cuando esta opción esnil
, los trabajos de análisis se envían a la cola de trabajos activos predeterminada (consulteconfig.active_job.default_queue_name
).config.active_storage.queues.analysis = :low_priority
config.active_storage.queues.purge
acepta un símbolo que indica la cola de trabajos activos que se utilizará para depurar trabajos. Cuando esta opción esnil
, los trabajos de depuración se envían a la cola de trabajos activos predeterminada (consulteconfig.active_job.default_queue_name
).
config.active_storage.queues.purge = :low_priority
```
* `config.active_storage.queues.mirror` acepta un símbolo que indica la cola de trabajos activos que se utilizará para los trabajos de duplicación de carga directa. El valor predeterminado es `:active_storage_mirror`.
```ruby
config.active_storage.queues.mirror = :low_priority
-
config.active_storage.logger
se puede usar para configurar el registrador usado por Active Storage. Acepta un registrador conforme a la interfaz de Log4r o la clase Ruby Logger predeterminada.
config.active_storage.logger = ActiveSupport::Logger.new(STDOUT)
-
config.active_storage.service_urls_expire_in
determina el vencimiento predeterminado de las URL generadas por:ActiveStorage :: Blob # url
ActiveStorage :: Blob # service_url_for_direct_upload
ActiveStorage :: Variant # url
El valor predeterminado es 5 minutos.
-
config.active_storage.routes_prefix
se puede usar 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
.
config.active_storage.replace_on_assign_to_many
determina si la asignación a una colección de adjuntos declarados conhas_many_attached
reemplaza los adjuntos existentes o los agrega. El valor predeterminado estrue
.config.active_storage.track_variants
determina si las variantes se registran en la base de datos. El valor predeterminado estrue
.config.active_storage.draw_routes
se puede usar para alternar la generación de rutas de almacenamiento activo. El valor predeterminado estrue
.config.active_storage.resolve_model_to_route
se puede usar para cambiar globalmente cómo se entregan los archivos de Active Storage.
Los valores permitidos son:
* : rails_storage_redirect
: Redirigir a URL de servicio de corta duración firmadas.
* : rails_storage_proxy
: Archivos proxy descargándolos.
El valor predeterminado es :rails_storage_redirect
.
3.15 Results of config.load_defaults
config.load_defaults
establece nuevos valores predeterminados hasta la versión aprobada e incluida. De modo que, al pasar, digamos, '6.0', también se obtienen los nuevos valores predeterminados de todas las versiones anteriores.
3.15.1 For '6.1', new defaults from previous versions below and:
-
config.active_record.has_many_inversing
:true
-
config.active_storage.track_variants
:true
3.15.2 For '6.0', new defaults from previous versions below and:
-
config.autoloader
::zeitwerk
-
config.action_view.default_enforce_utf8
:false
-
config.action_dispatch.use_cookies_with_metadata
:true
-
config.action_dispatch.return_only_media_type_on_content_type
:false
-
config.action_mailer.delivery_job
:"ActionMailer::MailDeliveryJob"
-
config.active_job.return_false_on_aborted_enqueue
:true
-
config.active_storage.queues.analysis
::active_storage_analysis
-
config.active_storage.queues.purge
::active_storage_purge
-
config.active_storage.replace_on_assign_to_many
:true
-
config.active_record.collection_cache_versioning
:true
3.15.3 For '5.2', new defaults from previous versions below and:
-
config.active_record.cache_versioning
:true
-
config.action_dispatch.use_authenticated_cookie_encryption
:true
-
config.active_support.use_authenticated_message_encryption
:true
-
config.active_support.use_sha1_digests
:true
-
config.action_controller.default_protect_from_forgery
:true
-
config.action_view.form_with_generates_ids
:true
3.15.4 For '5.1', new defaults from previous versions below and:
-
config.assets.unknown_asset_fallback
:false
-
config.action_view.form_with_generates_remote_forms
:true
3.15.5 For '5.0':
-
config.action_controller.per_form_csrf_tokens
:true
-
config.action_controller.forgery_protection_origin_check
:true
-
ActiveSupport.to_time_preserves_timezone
:true
-
config.active_record.belongs_to_required_by_default
:true
-
config.ssl_options
:{ hsts: { subdomains: true } }
3.16 Configuring a Database
Casi todas las aplicaciones de Rails interactuarán con una base de datos. Puede conectarse a la base de datos configurando una variable de entorno ENV['DATABASE_URL']
o 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 se puede almacenar en una URL y proporcionar a través de una variable de entorno como esta:
> puts ENV['DATABASE_URL']
postgresql://localhost/blog_development?pool=5
El archivo config/database.yml
contiene secciones para tres entornos diferentes en los que Rails puede ejecutarse de forma predeterminada:
- El entorno de
development
se utiliza en su computadora de desarrollo / local mientras interactúa manualmente con la aplicación. - El entorno
test
se utiliza cuando se ejecutan pruebas automatizadas. - El entorno de
production
se utiliza cuando implementas tu aplicación para que la use el mundo.
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 en las etiquetas se evaluará como código Ruby. Puede usar esto para extraer datos de una variable de entorno o realizar cálculos para generar la información de conexión necesaria.
No es necesario que actualice las configuraciones de la base de datos manualmente. Si observa las opciones del generador de aplicaciones, verá que una de las opciones se llama --database
. Esta opción le permite elegir un adaptador de una lista de las bases de datos relacionales más utilizadas. Incluso puede ejecutar el generador repetidamente: cd .. && rails new blog --database = mysql
. Cuando confirme la sobrescritura del archivo config/database.yml
, su aplicación se configurará para MySQL en lugar de SQLite. A continuación se muestran ejemplos detallados de las conexiones de bases de datos comunes.
3.17 Connection Preference
Dado que hay dos formas de configurar su conexión (usando config/database.yml
o usando una variable de entorno), es importante comprender cómo pueden interactuar.
Si tiene un archivo config/database.yml
vacío pero su ENV['DATABASE_URL']
está presente, 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 un 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 configurados config/database.yml
y ENV['DATABASE_URL']
, Rails fusionará 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'
#<ActiveRecord::DatabaseConfigurations:0x00007fd50e209a28>
$ bin/rails runner 'puts ActiveRecord::Base.configurations.inspect'
#<ActiveRecord::DatabaseConfigurations:0x00007fc8eab02880 @configurations=[
#<ActiveRecord::DatabaseConfigurations::UrlConfig:0x00007fc8eab020b0
@env_name="development", @spec_name="primary",
@config={"adapter"=>"postgresql", "database"=>"my_database", "host"=>"localhost"}
@url="postgresql://localhost/my_database">
]
Aquí, el adaptador, el host y la base de datos coinciden con la información de ENV['DATABASE_URL']
.
Si se proporciona información no duplicada, obtendrá todos los valores únicos, la variable de entorno aún 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'
#<ActiveRecord::DatabaseConfigurations:0x00007fd50e209a28>
$ bin/rails runner 'puts ActiveRecord::Base.configurations.inspect'
#<ActiveRecord::DatabaseConfigurations:0x00007fc8eab02880 @configurations=[
#<ActiveRecord::DatabaseConfigurations::UrlConfig:0x00007fc8eab020b0
@env_name="development", @spec_name="primary",
@config={"adapter"=>"postgresql", "database"=>"my_database", "host"=>"localhost", "pool"=>5}
@url="postgresql://localhost/my_database">
]
Dado que el grupo no está en la información de conexión ENV['DATABASE_URL']
proporcionada, su información se fusiona. Dado que el adapter
está duplicado, la información de conexión 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'
#<ActiveRecord::DatabaseConfigurations:0x00007fd50e209a28>
$ bin/rails runner 'puts ActiveRecord::Base.configurations.inspect'
#<ActiveRecord::DatabaseConfigurations:0x00007fc8eab02880 @configurations=[
#<ActiveRecord::DatabaseConfigurations::UrlConfig:0x00007fc8eab020b0
@env_name="development", @spec_name="primary",
@config={"adapter"=>"sqlite3", "database"=>"NOT_my_database"}
@url="sqlite3:NOT_my_database">
]
Aquí se ignora la información de conexión en ENV['DATABASE_URL']
, observe el adaptador y el nombre de la base de datos diferentes.
Dado que es posible incrustar ERB en su config/database.yml
, es una buena práctica mostrar explícitamente que está utilizando el ENV['DATABASE_URL']
para conectarse a su base de datos. Esto es especialmente útil en producción, ya que no debe enviar secretos como la contraseña de su base de datos en su control de código fuente (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.17.1 Configuring an SQLite3 Database
Rails viene con soporte integrado para SQLite3, que es una aplicación de base de datos liviana sin servidor. Si bien un entorno de producción ajetreado puede sobrecargar SQLite, funciona bien para el desarrollo y las pruebas. Rails utiliza de forma predeterminada 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: db/development.sqlite3
pool: 5
timeout: 5000
NOTA: Rails usa una base de datos SQLite3 para el almacenamiento de datos de forma predeterminada porque es una base de datos de configuración cero que simplemente funciona. Rails también es compatible con MySQL (incluido MariaDB) y PostgreSQL "listo para usar", y tiene complementos para muchos sistemas de bases de datos. Si está utilizando una base de datos en un entorno de producción, lo más probable es que Rails tenga un adaptador para ella.
3.17.2 Configuring a MySQL or MariaDB Database
Si elige usar MySQL o MariaDB en lugar de la base de datos SQLite3 enviada, 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 de desarrollo según corresponda.
Si su versión de MySQL es 5.5 o 5.6 y desea usar el juego de caracteres utf8mb4
por defecto, configure su servidor MySQL para que admita el prefijo de clave más largo habilitando la variable de sistema innodb_large_prefix
.
Los bloqueos de aviso están habilitados de forma predeterminada en MySQL y se utilizan para hacer que las migraciones de bases de datos sean seguras al mismo tiempo. Puede deshabilitar los bloqueos de aviso configurando advisory_locks
en false
:
production:
adapter: mysql2
advisory_locks: false
3.17.3 Configuring a PostgreSQL Database
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
Si está habilitado, Active Record creará hasta 1000
declaraciones preparadas por conexión de base de datos de forma predeterminada. Para modificar este comportamiento, puede establecer statement_limit
en un valor diferente:
production:
adapter: postgresql
statement_limit: 200
Cuantas más declaraciones preparadas se utilicen: más memoria necesitará su base de datos. Si su base de datos PostgreSQL está alcanzando los límites de memoria, intente reducir statement_limit
o deshabilitar las declaraciones preparadas.
3.17.4 Configuring an SQLite3 Database for JRuby Platform
Si elige usar SQLite3 y está usando JRuby, su config/database.yml
se verá un poco diferente. Aquí está la sección de desarrollo:
development:
adapter: jdbcsqlite3
database: db/development.sqlite3
3.17.5 Configuring a MySQL or MariaDB Database for JRuby Platform
Si elige usar MySQL o MariaDB y está usando 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.17.6 Configuring a PostgreSQL Database for JRuby Platform
Si elige utilizar PostgreSQL y está utilizando JRuby, su config/database.yml
se verá un poco diferente. Aquí está la sección de desarrollo:
development:
adapter: jdbcpostgresql
encoding: unicode
database: blog_development
username: blog
password:
Change the username and password in the development
section as appropriate.
3.17.7 Configuring Metadata Storage
De forma predeterminada, Rails almacenará información sobre su entorno y esquema de Rails
en una tabla interna llamada ar_internal_metadata
.
Para desactivar esto por conexión, configure use_metadata_table
en su base de datos
configuración. Esto es útil cuando se trabaja con una base de datos compartida y / o
usuario de la base de datos que no puede crear tablas.
development:
adapter: postgresql
use_metadata_table: false
3.18 Creating Rails Environments
Por defecto, Rails viene con tres entornos: "desarrollo", "prueba" y "producción". Si bien estos son suficientes para la mayoría de los casos de uso, hay circunstancias en las que desea más entornos.
Imagine que tiene un servidor que refleja el entorno de producción pero que solo se utiliza para realizar pruebas. Este tipo de servidor se denomina comúnmente "servidor provisional". Para definir un entorno llamado "staging" para este servidor, simplemente cree un archivo llamado config/environment/staging.rb
. Utilice el contenido de cualquier archivo existente en config/environment
como punto de partida y realice los cambios necesarios desde allí.
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.19 Deploy to a Subdirectory (relative URL root)
De forma predeterminada, 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 implementar nuestra aplicación en "/app1". Rails necesita saber este directorio para generar las rutas apropiadas:
config.relative_url_root = "/app1"
alternativamente, puede configurar el entorno RAILS_RELATIVE_URL_ROOT
variable.
Los carriles ahora antepondrán "/ app1" al generar enlaces.
3.19.1 Using Passenger
Passenger facilita la ejecución de su aplicación en un subdirectorio. Puede encontrar la configuración correspondiente en el Manual del pasajero.
3.19.2 Using a Reverse Proxy
La implementación de su aplicación utilizando un proxy inverso tiene claras ventajas sobre las implementaciones tradicionales. Le permiten tener más control sobre su servidor al colocar en capas los componentes requeridos por su aplicación.
Muchos servidores web modernos se pueden utilizar como servidor proxy para equilibrar elementos de terceros, como servidores de almacenamiento en caché o servidores de aplicaciones.
Uno de esos servidores de aplicaciones que puede usar 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). De forma predeterminada, Unicorn escuchará las 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 Léame de Unicornio y comprender la filosofía que hay detrás.
Una vez que haya configurado el servidor de aplicaciones, debe enviarle solicitudes mediante proxy configurando su servidor web de manera adecuada. 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;
}
# some other configuration
}
Asegúrese de leer la documentación de NGINX para obtener la información más actualizada.
4 Rails Environment Settings
Algunas partes de Rails también se pueden configurar externamente proporcionando variables de entorno. Varias partes de Rails reconocen las siguientes variables de entorno:
ENV[" RAILS_ENV"]
define el entorno de 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 las URL cuando implementa 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 separados de la misma aplicación.
5 Using Initializer Files
Después de cargar el marco y cualquier gema en su aplicación, Rails pasa a cargar inicializadores. Un inicializador es cualquier archivo Ruby almacenado en config/initializers
en su aplicación. Puede usar inicializadores para mantener los ajustes de configuración que deben realizarse después de que se carguen todos los marcos y gemas, como las opciones para configurar los ajustes de estas partes.
No hay garantía de que sus inicializadores se ejecuten después de todos los inicializadores de gemas, por lo que cualquier código de inicialización que dependa de que se haya inicializado una gema determinada debe ir a un bloque config.after_initialize
.
Puede utilizar subcarpetas para organizar sus inicializadores si lo desea, porque Rails examinará toda la jerarquía de archivos desde la carpeta de inicializadores hacia abajo.
Si bien Rails admite la numeración de los nombres de los archivos de inicialización con el fin de ordenar la carga, una mejor técnica es colocar cualquier código que deba cargarse en un orden específico dentro del mismo archivo. Esto reduce la pérdida de nombres de archivos, hace que las dependencias sean más explícitas y puede ayudar a que surjan nuevos conceptos dentro de su aplicación.
6 Initialization events
Rails tiene 5 eventos de inicialización a los que se pueden conectar (enumerados en el orden en que se ejecutan):
before_configuration
: Esto se ejecuta tan pronto como la constante de la aplicación hereda deRails::Application
. Las llamadasconfig
se evalúan antes de que esto suceda.before_initialize
: Esto se ejecuta directamente antes de que ocurra el proceso de inicialización de la aplicación con el inicializador:bootstrap_hook
cerca del comienzo del proceso de inicialización de Rails.to_prepare
: se ejecuta después de que se ejecuten los inicializadores para todos los Railties (incluida la aplicación en sí), pero antes de la carga ansiosa y la pila de middleware está construida. Más importante aún, se ejecutará en cada solicitud endevelopment
, pero solo una vez (durante el arranque) enproduction
ytest
.before_eager_load
: Esto se ejecuta directamente antes de que ocurra la carga ansiosa, que es el comportamiento predeterminado para el entorno deproduction
y no para el entorno dedevelopment
.after_initialize
: se ejecuta directamente después de la inicialización de la aplicación, después de que se ejecutan los inicializadores de la aplicación enconfig/initializers
.
Para definir un evento para estos ganchos, use la sintaxis de bloque dentro de una subclase Rails::Application
, Rails::Railtie
o Rails::Engine
:
module YourApp
class Application < Rails::Application
config.before_initialize do
# initialization code goes here
end
end
end
Alternativamente, también puede hacerlo a través del método config
en el objetoRails.application
:
Rails.application.config.before_initialize hacer
# código de inicialización va aquí
final
Algunas partes de su aplicación, en particular el enrutamiento, aún no están configuradas en el punto donde se llama al bloque after_initialize
.
6.1 Rails::Railtie#initializer
Rails tiene varios inicializadores que se ejecutan al inicio y que se definen utilizando el método initializer
deRails::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, el primero es el nombre del inicializador y el segundo es un hash de opciones (no se muestra aquí) y el tercero es un bloque. La clave :before
en el hash de opciones se puede especificar para especificar qué inicializador debe ejecutar este nuevo inicializador, y la clave :after
especificará qué inicializador ejecutar este inicializador después.
Los inicializadores definidos mediante el método initializer
se ejecutarán en el orden en el que están definidos, con la excepción de los que utilizan los métodos :before
o :after
.
ADVERTENCIA: Puede poner su inicializador antes o después de cualquier otro inicializador en la cadena, siempre que sea lógico. Supongamos que tiene 4 inicializadores llamados "uno" a "cuatro" (definidos en ese orden) y define "cuatro" para ir antes "cuatro" pero después "tres", eso no es lógico y Rails no podrá Determine su orden de inicializador.
El argumento de bloque del método initializer
es la instancia de la aplicación en sí, por lo que podemos acceder a la configuración usando el método config
como se hizo en el ejemplo.
Debido a que Rails::Application
hereda deRails :: Railtie
(indirectamente), puede usar el método initializer
en config/application.rb
para definir inicializadores para la aplicación.
6.2 Initializers
A continuación se muestra una lista completa de todos los inicializadores que se encuentran en Rails en el orden en que están definidos (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.load_active_support
: Requiereactive_support/dependencies
que establece la base para Active Support. Opcionalmente requiereactive_support/all
siconfig.active_support.bare
no es veraz, que es el valor predeterminado.initialize_logger
: Inicializa el registrador (un objetoActiveSupport::Logger
) para la aplicación y lo hace accesible enRails.logger
, siempre que ningún inicializador insertado antes de este punto haya definidoRails.logger
.initialize_cache
: SiRails.cache
no está configurado todavía, inicializa el 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 se ejecuta solo sicache_classes
se establece enfalse
, usaActionDispatch::Callbacks.after
para eliminar las constantes a las que se ha hecho referencia durante la solicitud desde el espacio de objetos para que recargarse durante la siguiente solicitud.initialize_dependency_mechanism
: Siconfig.cache_classes
es verdadero, configuraActiveSupport::Dependencies.mechanism
pararequire
dependencias en lugar deload
.bootstrap_hook
: Ejecuta todos los bloques configuradosbefore_initialize
.i18n.callbacks
: En el entorno de desarrollo, configura una devolución de llamadato_prepare
que llamará aI18n.reload!
si alguna de las configuraciones regionales ha cambiado desde la última solicitud. En el modo de producción, esta devolución de llamada solo se ejecutará en la primera solicitud.active_support.deprecation_behavior
: Configura informes de obsolescencia para entornos, de forma predeterminada en:log
para desarrollo,:notificar
para producción y:stderr
para prueba. Si no se establece un valor paraconfig.active_support.deprecation
, este inicializador solicitará al usuario que configure esta línea en el archivoconfig/environment
del entorno actual. Puede establecerse en una matriz de valores. Este inicializador también configura comportamientos para desaprobaciones no permitidas, por defecto en:raise
para desarrollo y prueba y:log
para producción. Las advertencias de desaprobación no permitidas se establecen de forma predeterminada en una matriz vacía.active_support.initialize_time_zone
: Establece la zona horaria predeterminada para la aplicación según 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 según la configuración deconfig.beginning_of_week
, que por defecto es:monday
.active_support.set_configs
: Configura Active Support usando la configuración enconfig.active_support
alsend
'los nombres de los métodos como configuradores aActiveSupport
y pasando los valores.action_dispatch.configure
: Configura elActionDispatch::Http::URL.tld_length
para que se establezca en el valor deconfig.action_dispatch.tld_length
.action_view.set_configs
: Configura la vista de acción usando la configuración enconfig.action_view
alsend
'los nombres de los métodos como definidores aActionView::Base
y pasando los valores.action_controller.assets_config
: Inicializa elconfig.actions_controller.assets_dir
en el directorio público de la aplicación si no está configurado explícitamente.action_controller.set_helpers_path
: Establece elhelpers_path
del controlador de acción en elhelpers_path
de la aplicación.action_controller.parameters_config
: Configura opciones de parámetros fuertes paraActionController::Parameters
.action_controller.set_configs
: Configura el controlador de acción usando la configuración enconfig.action_controller
alenviar
'los nombres de los métodos como configuradores aActionController::Base
y pasando los valores.action_controller.compile_config_methods
: Inicializa métodos para la configuración especificada para que sean más rápidos de acceder.active_record.initialize_timezone
: EstableceActiveRecord::Base.time_zone_aware_attributes
entrue
, así como también estableceActiveRecord::Base.default_timezone
en UTC. Cuando los atributos se leen de la base de datos, se convertirán a la zona horaria especificada porTime.zone
.active_record.logger
: EstableceActiveRecord::Base.logger
, si aún no lo está, enRails.logger
.active_record.migration_error
: Configura el middleware para comprobar si hay migraciones pendientes.active_record.check_schema_cache_dump
: Carga el volcado de caché del esquema si está configurado y disponible.active_record.warn_on_records_fetched_greater_than
: habilita advertencias cuando las consultas devuelven un gran número de registros.active_record.set_configs
: Configura Active Record usando la configuración 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
, que es responsable de informar al registrador el tiempo que tardan las llamadas de Active Record en la solicitud.active_record.set_reloader_hooks
: Restablece todas las conexiones recargables a la base de datos siconfig.cache_classes
se establece enfalse
.active_record.add_watchable_files
: Agrega archivosschema.rb
ystructure.sql
a los archivos observables.active_job.logger
: ConfiguraactiveJob::Base.logger
- si aún no está configurado - aRails.logger
.active_job.set_configs
: Configura el trabajo activo usando la configuración 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 lo está, enRails.logger
.action_mailer.set_configs
: Configura Action Mailer usando la configuración enconfig.action_mailer
alenviar
'los nombres de los métodos como establecedores aActionMailer::Base
y pasando los valores.action_mailer.compile_config_methods
: Inicializa métodos para la configuración especificada para que sean más rápidos de acceder.set_load_path
: Este inicializador se ejecuta antes debootstrap_hook
. Agrega las rutas especificadas porconfig.load_paths
y todas las rutas de carga automática a$ LOAD_PATH
.set_autoload_paths
: Este inicializador se ejecuta antes debootstrap_hook
. Agrega todos los subdirectorios deapp
y las rutas especificadas 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 para ver los archivos de la aplicación.load_environment_config
: Carga el archivoconfig/environment
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 de este directorio se pueden usar para guardar los ajustes de configuración que deben realizarse después de que se carguen todos los marcos.motors_blank_point
: proporciona un punto de 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 motor y railtie.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
, lo que hará que las plantillas estén disponibles para que todos los generadores puedan consultarlas.sure_autoload_once_paths_as_subset
: Asegura queconfig.autoload_once_paths
solo contenga rutas deconfig.autoload_paths
. Si contiene rutas adicionales, se generará una excepción.add_to_prepare_blocks
: El bloque para cada llamadaconfig.to_prepare
en la aplicación, un railtie o motor se agrega a las devoluciones de llamadato_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 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 Rack para la solicitud.eager_load!
: Siconfig.eager_load
estrue
, ejecuta los hooksconfig.before_eager_load
y luego llama aeager_load!
que cargará todos losconfig.eager_load_namespaces
.finisher_hook
: Proporciona un gancho para después de que se completa la inicialización del proceso de la aplicación, así como para 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 usandoActiveSupport::Callbacks.to_run
.disable_dependency_loading
: Desactiva la carga automática de dependencias siconfig.eager_load
se establece entrue
.
Las conexiones de la base de datos de Active Record son administradas por ActiveRecord::ConnectionAdapters::ConnectionPool
, que asegura que un grupo de conexiones sincronice la cantidad de acceso de subprocesos a un número limitado de conexiones de base de datos. Este límite predeterminado es 5 y se puede configurar en database.yml
.
development:
adapter: sqlite3
database: db/development.sqlite3
pool: 5
timeout: 5000
Dado que la agrupación de conexiones se maneja dentro de Active Record de forma predeterminada, todos los servidores de aplicaciones (Thin, Puma, Unicorn, etc.) deberían comportarse de la misma manera. El grupo de conexiones de la base de datos está inicialmente vacío. A medida que aumenta la demanda de conexiones, las creará hasta que alcance el límite del grupo de conexiones.
Cualquier solicitud comprobará una conexión la primera vez que requiera acceso a la base de datos. Al final de la solicitud, volverá a verificar la conexión. Esto significa que la ranura de conexión adicional estará disponible nuevamente para la siguiente solicitud en la cola.
Si intenta utilizar más conexiones de las disponibles, Active Record bloqueará usted y espere una conexión desde el grupo. Si no puede obtener una conexión, Se producirá un error de tiempo de espera similar al que se indica a continuación.
ActiveRecord::ConnectionTimeoutError - could not obtain a database connection within 5.000 seconds (waited 5.000 seconds)
Si obtiene el error anterior, es posible que desee aumentar el tamaño del
grupo de conexiones incrementando la opción grupo
endatabase.yml
Si está ejecutando en un entorno de subprocesos múltiples, podría existir la posibilidad de que varios subprocesos accedan a múltiples conexiones simultáneamente. Entonces, dependiendo de la carga de su solicitud actual, es muy posible que tenga varios subprocesos compitiendo por un número limitado de conexiones.
7 Custom configuration
Puede configurar su propio código a través del objeto de configuración Rails con
configuración personalizada en el espacio de nombres config.x
o enconfig
directamente.
La diferencia clave entre estos dos es que debería usar config.x
si
están definiendo la configuración nested (ej: config.x.nested.hi
), y solo
config
para la configuración de un nivel (por ejemplo,config.hello
).
config.x.payment_processing.schedule = :daily
config.x.payment_processing.retries = 3
config.super_debugger = true
Estos puntos de configuración están disponibles a través del objeto de configuración:
Rails.configuration.x.payment_processing.schedule # => :daily
Rails.configuration.x.payment_processing.retries # => 3
Rails.configuration.x.payment_processing.not_set # => nil
Rails.configuration.super_debugger # => true
También 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 or development_merchant_id
Rails::Application.config_for
supports a shared
configuration to group common
configurations. The shared configuration will be merged into the environment
configuration.
# config/example.yml
shared:
foo:
bar:
baz: 1
development:
foo:
bar:
qux: 2
# development environment
Rails.application.config_for(:example)[:foo][:bar] #=> { baz: 1, qux: 2 }
8 Search Engines Indexing
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 analizarán primero el archivo http://your-site.com/robots.txt
para
saber qué páginas está permitido indexar.
Rails crea este archivo para usted dentro de la carpeta /public
. Por defecto, permite
motores de búsqueda para indexar todas las páginas de su aplicación. Si quieres bloquear
indexando en todas las páginas de su aplicación, use esto:
User-agent: *
Disallow: /
Para bloquear solo páginas específicas, es necesario utilizar una sintaxis más compleja. Aprender en el official documentation.
9 Evented File System Monitor
Si se carga listen gem, Rails usa un
monitor del sistema de archivos para detectar cambios cuando config.cache_classes
es
false
:
group :development do
gem 'listen', '~> 3.2'
end
De lo contrario, en cada solicitud, Rails recorre el árbol de la aplicación para comprobar si nada ha cambiado.
En Linux y macOS no se necesitan gemas adicionales, pero se requieren algunas for *BSD y for Windows.
Tenga en cuenta que some setups are unsupported.
Comentarios Sobre el Contenido
Las guías de rieles se administran y publican en latinadeveloper/railsguides.es en GitHub.
Si lee esta guía y encuentra algún texto o código incorrecto que le interese, no dude en enviar una solicitud de extracción en el repositorio anterior. Consulte el archivo README en GitHub para saber cómo enviar una solicitud de extracción. Please contribute if you see any typos or factual errors.