diff --git a/sqlx-macros/src/lib.rs b/sqlx-macros/src/lib.rs index f6d225dc97..beac1dd875 100644 --- a/sqlx-macros/src/lib.rs +++ b/sqlx-macros/src/lib.rs @@ -11,6 +11,8 @@ use quote::quote; #[cfg(feature = "runtime-async-std")] use async_std::task::block_on; +use std::path::PathBuf; + use url::Url; type Error = Box; @@ -60,6 +62,16 @@ macro_rules! async_macro ( let res: Result = block_on(async { use sqlx::connection::Connect; + // If a .env file exists at CARGO_MANIFEST_DIR, load environment variables from this, + // otherwise fallback to default dotenv behaviour. + if let Ok(dir) = std::env::var("CARGO_MANIFEST_DIR") { + let env_path = PathBuf::from(dir).join(".env"); + if env_path.exists() { + dotenv::from_path(&env_path) + .map_err(|e| format!("failed to load environment from {:?}, {}", env_path, e))? + } + } + let db_url = Url::parse(&dotenv::var("DATABASE_URL").map_err(|_| "DATABASE_URL not set")?)?; match db_url.scheme() {