From 3be842c6536c7c7df54d93c4db0c9e5662a0001b Mon Sep 17 00:00:00 2001 From: KITAITI Makoto Date: Thu, 7 May 2020 02:27:59 +0900 Subject: [PATCH] Make database connections configurable by environment variables (#768) * Make env DB_MAX_SIZE and DB_MIN_IDLE recognizable * Make database max size and minimum idle configurable * Restore file permission * Fail fast --- plume-models/src/config.rs | 10 ++++++++++ src/main.rs | 9 ++++++--- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/plume-models/src/config.rs b/plume-models/src/config.rs index 40cece6d..03e08a1b 100644 --- a/plume-models/src/config.rs +++ b/plume-models/src/config.rs @@ -11,6 +11,8 @@ pub struct Config { pub base_url: String, pub database_url: String, pub db_name: &'static str, + pub db_max_size: Option, + pub db_min_idle: Option, pub search_index: String, pub rocket: Result, pub logo: LogoConfig, @@ -193,6 +195,14 @@ lazy_static! { var("ROCKET_PORT").unwrap_or_else(|_| "7878".to_owned()) )), db_name: DB_NAME, + db_max_size: var("DB_MAX_SIZE").map_or(None, |s| Some( + s.parse::() + .expect("Couldn't parse DB_MAX_SIZE into u32") + )), + db_min_idle: var("DB_MIN_IDLE").map_or(None, |s| Some( + s.parse::() + .expect("Couldn't parse DB_MIN_IDLE into u32") + )), #[cfg(feature = "postgres")] database_url: var("DATABASE_URL") .unwrap_or_else(|_| format!("postgres://plume:plume@localhost/{}", DB_NAME)), diff --git a/src/main.rs b/src/main.rs index 5016e982..ed203049 100644 --- a/src/main.rs +++ b/src/main.rs @@ -55,10 +55,13 @@ fn init_pool() -> Option { } let manager = ConnectionManager::::new(CONFIG.database_url.as_str()); - let pool = DbPool::builder() + let mut builder = DbPool::builder() .connection_customizer(Box::new(PragmaForeignKey)) - .build(manager) - .ok()?; + .min_idle(CONFIG.db_min_idle); + if let Some(max_size) = CONFIG.db_max_size { + builder = builder.max_size(max_size); + }; + let pool = builder.build(manager).ok()?; Instance::cache_local(&pool.get().unwrap()); Some(pool) }