📝 Refina la doc. de gestión de la configuración
This commit is contained in:
parent
100a1cbe6d
commit
466ea97186
1 changed files with 39 additions and 13 deletions
|
|
@ -1,21 +1,28 @@
|
||||||
//! Gestión de la configuración.
|
//! Gestión de la configuración.
|
||||||
//!
|
//!
|
||||||
//! Comprueba el modo de ejecución activo y carga la configuración asociada en forma de pares
|
//! Carga la configuración de la aplicación en forma de pares `clave = valor` incluidos en archivos
|
||||||
//! `clave = valor` incluidos en archivos [TOML](https://toml.io).
|
//! [TOML](https://toml.io).
|
||||||
//!
|
//!
|
||||||
//! PageTop aplica los principios de [The Twelve-Factor App](https://12factor.net/es/).
|
//! La metodología [The Twelve-Factor App](https://12factor.net/es/) define **la configuración de
|
||||||
|
//! una aplicación como todo lo que puede variar entre despliegues**, distinguiendo entornos de
|
||||||
|
//! desarrollo, pre-producción, producción, etc.
|
||||||
|
//!
|
||||||
|
//! A veces las aplicaciones guardan configuraciones como constantes en el código, lo que supone una
|
||||||
|
//! violación de esta metodología. Es necesaria una **estricta separación de configuración y
|
||||||
|
//! código**. La configuración varía sustancialmente en cada despliegue, el código no.
|
||||||
|
//!
|
||||||
|
//! PageTop aplica estos principios cargando la configuración asociada al modo de ejecución activo.
|
||||||
//!
|
//!
|
||||||
//! # ¿Cómo usar los archivos de configuración?
|
//! # ¿Cómo usar los archivos de configuración?
|
||||||
//!
|
//!
|
||||||
//! Si tu aplicación requiere ajustes de configuración debes crear un directorio llamado *config*
|
//! Si tu aplicación requiere ajustes de configuración debes crear un directorio llamado *config* al
|
||||||
//! (ver [`CONFIG_DIR`]) al mismo nivel del archivo *Cargo.toml* de tu proyecto (o del ejecutable
|
//! mismo nivel del archivo *Cargo.toml* de tu proyecto (o del ejecutable binario de la aplicación).
|
||||||
//! binario de la aplicación).
|
|
||||||
//!
|
//!
|
||||||
//! Guarda la configuración usando archivos TOML asumiendo el siguiente orden de lectura (todos los
|
//! Guarda la configuración usando archivos TOML asumiendo el siguiente orden de lectura secuencial
|
||||||
//! archivos son opcionales):
|
//! (todos los archivos son opcionales):
|
||||||
//!
|
//!
|
||||||
//! 1. *config/common.toml*, útil para asignar valores comunes para cualquier entorno. Estos valores
|
//! 1. *config/common.toml*, útil para asignar los valores comunes a cualquier entorno. Estos
|
||||||
//! pueden ser modificados al fusionar los siguientes archivos de configuración.
|
//! valores pueden ser modificados al fusionar los archivos de configuración siguientes.
|
||||||
//!
|
//!
|
||||||
//! 2. *config/{archivo}.toml*, donde *{archivo}* puede definirse mediante la variable de entorno
|
//! 2. *config/{archivo}.toml*, donde *{archivo}* puede definirse mediante la variable de entorno
|
||||||
//! PAGETOP_RUN_MODE:
|
//! PAGETOP_RUN_MODE:
|
||||||
|
|
@ -27,8 +34,26 @@
|
||||||
//! entornos de ejecución. Por ejemplo, para *devel.toml*, *staging.toml* o *production.toml*.
|
//! entornos de ejecución. Por ejemplo, para *devel.toml*, *staging.toml* o *production.toml*.
|
||||||
//! O también para *server1.toml* o *server2.toml*. Sólo uno será cargado.
|
//! O también para *server1.toml* o *server2.toml*. Sólo uno será cargado.
|
||||||
//!
|
//!
|
||||||
|
//! * Normalmente estos archivos suelen ser idóneos para incluir contraseñas o configuración
|
||||||
|
//! sensible asociada al entorno correspondiente. Estos archivos no deberían ser publicados en
|
||||||
|
//! el repositorio Git por razones de seguridad.
|
||||||
|
//!
|
||||||
//! 3. *config/local.toml*, para añadir o sobrescribir ajustes.
|
//! 3. *config/local.toml*, para añadir o sobrescribir ajustes.
|
||||||
//!
|
//!
|
||||||
|
//! # ¿Cómo añadir valores de configuración predeterminados?
|
||||||
|
//!
|
||||||
|
//! ```
|
||||||
|
//! use pagetop::{config, default_settings};
|
||||||
|
//!
|
||||||
|
//! // Una aplicación o un módulo podrá añadir nuevos valores de configuración predeterminados.
|
||||||
|
//! config::add_defaults(default_settings![
|
||||||
|
//! // [my_app]
|
||||||
|
//! "my_app.test_1" => "Test 1",
|
||||||
|
//! "my_app.test_2" => "Test 2",
|
||||||
|
//! "my_app.passwd" => "Pass_1234",
|
||||||
|
//! ]);
|
||||||
|
//! ```
|
||||||
|
//!
|
||||||
//! # ¿Cómo leer los valores de configuración?
|
//! # ¿Cómo leer los valores de configuración?
|
||||||
//!
|
//!
|
||||||
//! ```
|
//! ```
|
||||||
|
|
@ -37,7 +62,7 @@
|
||||||
//! // Obtiene el valor (String) de una clave.
|
//! // Obtiene el valor (String) de una clave.
|
||||||
//! let app_name: String = config::get("app.name");
|
//! let app_name: String = config::get("app.name");
|
||||||
//!
|
//!
|
||||||
//! // Obtiene el valor (del tipo indicado) de una clave.
|
//! // Obtiene el valor (del tipo especificado) de una clave.
|
||||||
//! let db_port: u16 = config::get_value::<u16>("database.db_port");
|
//! let db_port: u16 = config::get_value::<u16>("database.db_port");
|
||||||
//! ```
|
//! ```
|
||||||
|
|
||||||
|
|
@ -64,7 +89,7 @@ macro_rules! default_settings {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Directorio donde se encuentran los archivos de configuración.
|
/// Directorio donde se encuentran los archivos de configuración.
|
||||||
pub const CONFIG_DIR: &str = "config";
|
const CONFIG_DIR: &str = "config";
|
||||||
|
|
||||||
/// Carga los valores originales "clave = valor" de los archivos de configuración. Con
|
/// Carga los valores originales "clave = valor" de los archivos de configuración. Con
|
||||||
/// [`config_map`] se asignarán los ajustes globales ([`SETTINGS`]); y se podrán asignar los ajustes
|
/// [`config_map`] se asignarán los ajustes globales ([`SETTINGS`]); y se podrán asignar los ajustes
|
||||||
|
|
@ -130,6 +155,7 @@ static DEFAULTS: LazyStatic<RwLock<HashMap<&str, &str>>> = LazyStatic::new(||
|
||||||
])
|
])
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/// Una aplicación o un módulo podrá añadir nuevos valores de configuración predeterminados.
|
||||||
pub fn add_defaults(defaults: HashMap<&'static str, &'static str>) {
|
pub fn add_defaults(defaults: HashMap<&'static str, &'static str>) {
|
||||||
DEFAULTS.write().unwrap().extend(defaults);
|
DEFAULTS.write().unwrap().extend(defaults);
|
||||||
}
|
}
|
||||||
|
|
@ -152,7 +178,7 @@ pub fn get(key: &str) -> String {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Devuelve el valor (del tipo indicado) de una clave.
|
/// Devuelve el valor (del tipo especificado) de una clave.
|
||||||
pub fn get_value<T: FromStr + Default>(key: &str) -> T where <T as FromStr>::Err: Debug {
|
pub fn get_value<T: FromStr + Default>(key: &str) -> T where <T as FromStr>::Err: Debug {
|
||||||
match get(key).parse::<T>() {
|
match get(key).parse::<T>() {
|
||||||
Ok(value) => value,
|
Ok(value) => value,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue