14个不稳定版本 (6个破坏性更新)
0.15.0 | 2019年10月21日 |
---|---|
0.14.1 | 2019年5月15日 |
0.11.0 | 2018年1月1日 |
0.10.0 | 2017年1月4日 |
0.7.2 | 2015年12月25日 |
#915 in 配置
4,571 每月下载量
在 31 个库中使用 (27 个直接使用)
3KB
rust-dotenv
注意! 这是一个v0.*版本!预计会有很多错误和问题。强烈鼓励提交pull请求和问题!
将配置存储在环境变量中是十二要素应用的一个原则。任何可能在部署环境之间发生变化的东西(例如数据库的资源处理或外部服务的凭证)都应从代码中提取到环境变量中。
这个库旨在用于开发或测试环境,在这些环境中设置环境变量不切实际。如果可用,它会从当前目录或其父目录中的名为.env
的文件中加载环境变量,并将这些变量与操作系统提供的环境变量合并。
用法
最简单和最常用的用法是在应用程序启动时调用dotenv::dotenv
,这将从当前目录或其父目录中的名为.env
的文件中加载环境变量;之后,您只需调用std::os
提供的与环境相关的方法。
如果您需要更细粒度的文件名或位置控制,可以使用crate提供的from_filename
和from_path
方法。
dotenv_codegen
提供了一个dotenv!
宏,其行为与env!
相同,但首先在编译时尝试加载一个名为.env
的文件。
示例
一个.env
文件看起来像这样
# a comment, will be ignored
REDIS_ADDRESS=localhost:6379
MEANING_OF_LIFE=42
您可以可选地在每个行前加上单词export
,这将方便地在您的shell中源整个文件。
使用Dotenv的示例项目如下
extern crate dotenv;
use dotenv::dotenv;
use std::env;
fn main() {
dotenv().ok();
for (key, value) in env::vars() {
println!("{}: {}", key, value);
}
}
变量替换
可以使用 $VARIABLE
语法在 .env
文件中重用变量。语法和规则与bash类似,以下是一个示例
VAR=one
VAR_2=two
# Non-existing values are replaced with an empty string
RESULT=$NOPE #value: '' (empty string)
# All the letters after $ symbol are treated as the variable name to replace
RESULT=$VAR #value: 'one'
# Double quotes do not affect the substitution
RESULT="$VAR" #value: 'one'
# Different syntax, same result
RESULT=${VAR} #value: 'one'
# Curly braces are useful in cases when we need to use a variable with non-alphanumeric name
RESULT=$VAR_2 #value: 'one_2' since $ with no curly braces stops after first non-alphanumeric symbol
RESULT=${VAR_2} #value: 'two'
# The replacement can be escaped with either single quotes or a backslash:
RESULT='$VAR' #value: '$VAR'
RESULT=\$VAR #value: '$VAR'
# Environment variables are used in the substutution and always override the local variables
RESULT=$PATH #value: the contents of the $PATH environment variable
PATH="My local variable value"
RESULT=$PATH #value: the contents of the $PATH environment variable, even though the local variable is defined
Dotenv将解析文件,按照注释中描述的方式替换变量。
使用 dotenv!
宏
将 dotenv_codegen
添加到您的依赖项中,并将以下内容添加到您的crate顶部
#[macro_use]
extern crate dotenv_codegen;
然后,在您的crate中
fn main() {
println!("{}", dotenv!("MEANING_OF_LIFE"));
}
依赖项
~1.5MB
~36K SLoC