Rust使用dotenvy读取环境变量
dotenv四年没维护了,这里使用dotenvy
配置环境吧
sea-orm官方用的也是这个
添加crate
[dependencies]
# 读取.env文件
dotenvy = "0.15.7"
根目录设置.env
文件
DATABASE_URL=postgres://postgres:root123456@localhost:5432/postgres
HOST=127.0.0.1
PORT=8080
读取环境变量
dotenvy官方给出的是expect处理错误,但我在使用时无法读取文件,使用ok可以读取
dotenvy::dotenv().ok();
读取某一个变量
expect错误时触发panic
.ok错误时返回None
env::var("HOST").expect("HOST is not set in .env file")
完整代码
use axum::{
routing::get,
Router,
};
use std::env;
#[tokio::main]
async fn main() {
// 加载.env 文件,成功返回包含的值,失败返回None,这里不要使用.expect
dotenvy::dotenv().ok();
let db_url = env::var("DATABASE_URL").expect("DATABASE_URL is not set in .env file");
let host = env::var("HOST").expect("HOST is not set in .env file");
let port = env::var("PORT").expect("PORT is not set in .env file");
let server_url = format!("{host}:{port}");
// 其他环境变量
for (key, value) in env::vars() {
println!("{key}: {value}");
}
let app = Router::new().route("/", get(|| async { "Hello, World!" }));
let listener = tokio::net::TcpListener::bind(&server_url).await.unwrap();
axum::serve(listener, app).await.unwrap();
}