Merge branch '12-allow-separation-of-postgres-db-endpoint-and-credentials' into 'main'
Build database URL from POSTGRES_ environment variables Closes #12 See merge request libretunes/libretunes!5
This commit is contained in:
commit
cfcfe5a7c8
@ -1,4 +1,5 @@
|
||||
use cfg_if::cfg_if;
|
||||
use leptos::logging::log;
|
||||
|
||||
cfg_if! {
|
||||
if #[cfg(feature = "ssr")] {
|
||||
@ -25,12 +26,59 @@ lazy_static! {
|
||||
|
||||
/// Initialize the database pool
|
||||
///
|
||||
/// Will panic if the DATABASE_URL environment variable is not set, or if there is an error creating the pool.
|
||||
/// Uses DATABASE_URL environment variable to connect to the database if set,
|
||||
/// otherwise builds a connection string from other environment variables.
|
||||
///
|
||||
/// Will panic if either the DATABASE_URL or POSTGRES_HOST environment variables
|
||||
/// are not set, or if there is an error creating the pool.
|
||||
///
|
||||
/// # Returns
|
||||
/// A database pool object, which can be used to get pooled connections
|
||||
fn init_db_pool() -> PgPool {
|
||||
let database_url = env::var("DATABASE_URL").expect("DATABASE_URL must be set");
|
||||
let database_url = env::var("DATABASE_URL").unwrap_or_else(|_| {
|
||||
// Build the database URL from environment variables
|
||||
// Construct a separate log_url to avoid logging the password
|
||||
let mut log_url = "postgres://".to_string();
|
||||
let mut url = "postgres://".to_string();
|
||||
|
||||
if let Ok(user) = env::var("POSTGRES_USER") {
|
||||
url.push_str(&user);
|
||||
log_url.push_str(&user);
|
||||
|
||||
if let Ok(password) = env::var("POSTGRES_PASSWORD") {
|
||||
url.push_str(":");
|
||||
log_url.push_str(":");
|
||||
url.push_str(&password);
|
||||
log_url.push_str("********");
|
||||
}
|
||||
|
||||
url.push_str("@");
|
||||
log_url.push_str("@");
|
||||
}
|
||||
|
||||
let host = env::var("POSTGRES_HOST").expect("DATABASE_URL or POSTGRES_HOST must be set");
|
||||
|
||||
url.push_str(&host);
|
||||
log_url.push_str(&host);
|
||||
|
||||
if let Ok(port) = env::var("POSTGRES_PORT") {
|
||||
url.push_str(":");
|
||||
url.push_str(&port);
|
||||
log_url.push_str(":");
|
||||
log_url.push_str(&port);
|
||||
}
|
||||
|
||||
if let Ok(dbname) = env::var("POSTGRES_DB") {
|
||||
url.push_str("/");
|
||||
url.push_str(&dbname);
|
||||
log_url.push_str("/");
|
||||
log_url.push_str(&dbname);
|
||||
}
|
||||
|
||||
log!("Connecting to database: {}", log_url);
|
||||
url
|
||||
});
|
||||
|
||||
let manager = ConnectionManager::<PgConnection>::new(database_url);
|
||||
PgPool::builder()
|
||||
.build(manager)
|
||||
|
Loading…
x
Reference in New Issue
Block a user