this repo has no description

support DATABASE_URL environment variable

vielle.dev 8b449d6f edc38383

verified
Changed files
+41 -20
src
+34 -10
src/config.rs
··· 24 24 }); 25 25 26 26 pub static POSTGRES_URL: LazyLock<String> = LazyLock::new(|| { 27 - let Ok(user) = env::var("POSTGRES_USER") else { 28 - panic!("POSTGRES_USER was not set. Cannot connect to database") 29 - }; 30 - let Ok(password) = env::var("POSTGRES_PASSWORD") else { 31 - panic!("POSTGRES_PASSWORD was not set. Cannot connect to database") 32 - }; 33 - let Ok(host) = env::var("POSTGRES_HOST") else { 34 - panic!("POSTGRES_HOST was not set. Cannot connect to database") 35 - }; 27 + if let Ok(url) = env::var("DATABASE_URL") { 28 + return url; 29 + } 30 + 31 + let user = env::var("POSTGRES_USER"); 32 + let db = env::var("POSTGRES_DATABASE").or_else(|_| user.clone()); 33 + let password = env::var("POSTGRES_PASSWORD"); 34 + let host = env::var("POSTGRES_HOST"); 36 35 37 - format!("postgres://{}:{}@{}/{}", user, password, host, user) 36 + if let Ok(user) = user.clone() 37 + && let Ok(db) = db.clone() 38 + && let Ok(password) = password.clone() 39 + && let Ok(host) = host.clone() 40 + { 41 + format!("postgres://{}:{}@{}/{}", user, password, host, db) 42 + } else { 43 + let missing = [ 44 + (user, "USER"), 45 + (db, "DATABASE"), 46 + (password, "PASSWORD"), 47 + (host, "HOST"), 48 + ] 49 + .iter() 50 + .filter_map(|x| { 51 + if x.0.is_err() { 52 + Some(String::from("POSTGRES_") + x.1) 53 + } else { 54 + None 55 + } 56 + }) 57 + .collect::<Vec<String>>() 58 + .join(", "); 59 + 60 + panic!("Could not generate database url. Missing environment variables {}. Set DATABASE_URL to define the postgres url manually", missing); 61 + } 38 62 });
+1 -2
src/db.rs
··· 7 7 let conn = match PgPool::connect(&config::POSTGRES_URL).await { 8 8 Ok(val) => val, 9 9 Err(err) => { 10 - println!("Could not connect to the database. Got error {err}"); 11 - panic!() 10 + panic!("Could not connect to the database. Got error {err}"); 12 11 } 13 12 }; 14 13
+6 -8
src/main.rs
··· 17 17 let conn: Pool<Postgres> = db::conn().await; 18 18 println!("Database connected and initialized"); 19 19 20 - let pds = match utils::resolver::resolve(&config::USER).await { 21 - Ok(val) => val, 22 - Err(err) => panic!("{}", err), 23 - }; 20 + let pds = utils::resolver::resolve(&config::USER) 21 + .await 22 + .unwrap_or_else(|err| panic!("{}", err)); 24 23 25 24 println!("Starting backfill"); 26 25 let timer = std::time::Instant::now(); 27 26 28 - if let Err(err) = backfill(&pds, &conn, Some(timer)).await { 29 - println!("{}", err); 30 - return Err(Error); 31 - }; 27 + backfill(&pds, &conn, Some(timer)) 28 + .await 29 + .unwrap_or_else(|err| panic!("{}", err)); 32 30 33 31 println!("Backfill complete. Took {:?}", timer.elapsed()); 34 32