🔧 Add optional local config file for default mode

This commit is contained in:
Manuel Cillero 2023-10-29 19:10:54 +01:00
parent f198b35762
commit 6ac4c9ce33
4 changed files with 36 additions and 28 deletions

2
.gitignore vendored
View file

@ -1,4 +1,6 @@
**/target
**/log/*.log*
**/local.*.toml
**/local.toml
Cargo.lock
workdir

View file

@ -1,4 +1,10 @@
[database]
db_name = "drust"
db_user = "drust"
db_pass = "DrU__#3T"
[app]
#theme = "Basic"
#theme = "Chassis"
theme = "Inception"
#theme = "Bootsier"
#theme = "Bulmix"
language = "es-ES"
[log]
tracing = "Info,pagetop=Debug,sqlx::query=Warn"

View file

@ -1,13 +0,0 @@
[app]
#theme = "Basic"
#theme = "Chassis"
theme = "Inception"
#theme = "Bootsier"
#theme = "Bulmix"
language = "es-ES"
[log]
tracing = "Info,pagetop=Debug,sqlx::query=Warn"
[dev]
#static_files = "../pagetop/static"

View file

@ -121,7 +121,7 @@ mod value;
use crate::config::data::ConfigData;
use crate::config::file::File;
use crate::LazyStatic;
use crate::{concat_string, LazyStatic};
use serde::Deserialize;
@ -132,6 +132,8 @@ const CONFIG_DIR: &str = "config";
/// Valores originales de la configuración en forma de pares `clave = valor` recogidos de los
/// archivos de configuración.
#[rustfmt::skip]
pub static CONFIG: LazyStatic<ConfigData> = LazyStatic::new(|| {
// Modo de ejecución según la variable de entorno PAGETOP_RUN_MODE. Por defecto 'default'.
let run_mode = env::var("PAGETOP_RUN_MODE").unwrap_or_else(|_| "default".into());
@ -139,17 +141,28 @@ pub static CONFIG: LazyStatic<ConfigData> = LazyStatic::new(|| {
// Inicializa los ajustes.
let mut settings = ConfigData::default();
// Combina los archivos de configuración y asigna el modo de ejecución.
// Combina los archivos (opcionales) de configuración y asigna el modo de ejecución.
settings
// Primero añade la configuración común a todos los entornos. Opcional.
.merge(File::with_name(&format!("{}/{}.toml", CONFIG_DIR, "common")).required(false))
.unwrap()
// Combina la configuración específica del entorno. Por defecto 'default.toml'. Opcional.
.merge(File::with_name(&format!("{}/{}.toml", CONFIG_DIR, run_mode)).required(false))
.unwrap()
// Combina la configuración local. Este archivo no debería incluirse en git. Opcional.
.merge(File::with_name(&format!("{}/{}.toml", CONFIG_DIR, "local")).required(false))
.unwrap()
// Primero añade la configuración común a todos los entornos. Por defecto 'common.toml'.
.merge(
File::with_name(&concat_string!(CONFIG_DIR, "/common.toml"))
.required(false)
).unwrap()
// Añade la configuración específica del entorno. Por defecto 'default.toml'.
.merge(
File::with_name(&concat_string!(CONFIG_DIR, "/", run_mode, ".toml"))
.required(false)
).unwrap()
// Añade la configuración local reservada del entorno. Por defecto 'default.local.toml'.
.merge(
File::with_name(&concat_string!(CONFIG_DIR, "/", run_mode, ".local.toml"))
.required(false),
).unwrap()
// Añade la configuración local reservada general. Por defecto 'local.toml'.
.merge(
File::with_name(&concat_string!(CONFIG_DIR, "/local.toml"))
.required(false)
).unwrap()
// Salvaguarda el modo de ejecución.
.set("app.run_mode", run_mode)
.unwrap();