dotenvy
- Alternativa a
dotenv dotenvyse utiliza para poder acceder a las variables que se definen en el archivo.env- Se pueden obtener las variables del sistema (no del archivo
.env) sindotenvy
Instalación
cargo add dotenvy
Cargo.toml
[dependencies]
dotenvy = "0.15.7"
Uso
fn main() {
// Cargar variables de entorno desde el archivo .env
// Fallará si el archivo no existe o no se puede leer
// ok() para evitar el error (ya que en producción no existe el archivo .env)
dotenvy::dotenv().ok();
// Manejo sencillo de erores (falla si no existe, como en un servidor)
dotenvy::dotenv().map_err(|_| "Error al cargar o persear el archivo .env")?;
// Mnejo de algunos errores al cargar el archivo .env
// Si funcionaria en producción
// Pero es mejor leer el entorno, como una variable "ENVIRONMENT"
// Y hacer el if para leer o no el archivo
match dotenvy::dotenv() {
Ok(_) => {}
Err(dotenvy::Error::Io(error)) if error.kind() == ErrorKind::NotFound => {}
Err(dotenvy::Error::LineParse(_, line_num)) => {
return Err(format!("Error de parseo en el archivo .env, línea {line_num}").into());
}
Err(error) => return Err(error.into()),
}
// Obtener variables de entorno (con o sin dotenvy) en tiempo de ejecución
let server = env::var("SERVER").unwrap_or("127.0.0.1:3000".to_owned());
let db_url = env::var("DATABASE_URL").expect("DATABASE_URL undefined");
// env!
// Para comprobar las variables de entorno en tiempo de compilación
const CARGO_PKG_VERSION: &str = env!("CARGO_PKG_VERSION");
for (key, value) in env::vars() {
println!("{key}: {value}");
}
}