feat(server): also support individual DB environment variables instead of DATABASE_URL

This commit is contained in:
perf3ct 2025-09-24 19:53:20 +00:00
parent 32262db3dd
commit b435437ad3
No known key found for this signature in database
GPG Key ID: 569C4EEC436F5232
2 changed files with 65 additions and 4 deletions

View File

@ -1,5 +1,14 @@
# Core Configuration
# Option 1: Use DATABASE_URL (takes priority if set)
DATABASE_URL=postgresql://readur:readur_password@localhost:5432/readur
# Option 2: Use individual PostgreSQL environment variables
# (Only used if DATABASE_URL is not set)
# POSTGRES_HOST=localhost
# POSTGRES_PORT=5432
# POSTGRES_DB=readur
# POSTGRES_USER=readur
# POSTGRES_PASSWORD=readur_password
JWT_SECRET=your-super-secret-jwt-key-change-this-in-production
SERVER_ADDRESS=0.0.0.0:8000

View File

@ -58,10 +58,62 @@ impl Config {
val
}
Err(_) => {
let default_url = "postgresql://readur:readur@localhost/readur".to_string();
println!("⚠️ DATABASE_URL: {} (using default - env var not set)",
"postgresql://readur:***@localhost/readur");
default_url
// Try to construct from individual env vars
let db_host = env::var("POSTGRES_HOST").unwrap_or_else(|_| "localhost".to_string());
let db_port = env::var("POSTGRES_PORT").unwrap_or_else(|_| "5432".to_string());
let db_name = env::var("POSTGRES_DB").unwrap_or_else(|_| "readur".to_string());
let db_user = env::var("POSTGRES_USER").unwrap_or_else(|_| "readur".to_string());
let db_password = env::var("POSTGRES_PASSWORD").unwrap_or_else(|_| "readur".to_string());
// Check if any individual env vars were set
let using_individual_vars = env::var("POSTGRES_HOST").is_ok()
|| env::var("POSTGRES_PORT").is_ok()
|| env::var("POSTGRES_DB").is_ok()
|| env::var("POSTGRES_USER").is_ok()
|| env::var("POSTGRES_PASSWORD").is_ok();
if using_individual_vars {
println!("📊 Constructing DATABASE_URL from individual environment variables:");
if env::var("POSTGRES_HOST").is_ok() {
println!(" ✅ POSTGRES_HOST: {}", db_host);
} else {
println!(" ⚠️ POSTGRES_HOST: {} (using default)", db_host);
}
if env::var("POSTGRES_PORT").is_ok() {
println!(" ✅ POSTGRES_PORT: {}", db_port);
} else {
println!(" ⚠️ POSTGRES_PORT: {} (using default)", db_port);
}
if env::var("POSTGRES_DB").is_ok() {
println!(" ✅ POSTGRES_DB: {}", db_name);
} else {
println!(" ⚠️ POSTGRES_DB: {} (using default)", db_name);
}
if env::var("POSTGRES_USER").is_ok() {
println!(" ✅ POSTGRES_USER: {}", db_user);
} else {
println!(" ⚠️ POSTGRES_USER: {} (using default)", db_user);
}
if env::var("POSTGRES_PASSWORD").is_ok() {
println!(" ✅ POSTGRES_PASSWORD: ***hidden*** ({} chars)", db_password.len());
} else {
println!(" ⚠️ POSTGRES_PASSWORD: using default");
}
}
let constructed_url = format!(
"postgresql://{}:{}@{}:{}/{}",
db_user, db_password, db_host, db_port, db_name
);
if using_individual_vars {
println!("🔗 Constructed DATABASE_URL: postgresql://{}:***@{}:{}/{}",
db_user, db_host, db_port, db_name);
} else {
println!("⚠️ DATABASE_URL: postgresql://readur:***@localhost:5432/readur (using all defaults - no env vars set)");
}
constructed_url
}
};