15个版本 (5个重大更新)
0.26.1 | 2023年9月19日 |
---|---|
0.26.0 | 2023年9月19日 |
0.25.0 | 2023年8月29日 |
0.24.0 | 2023年8月16日 |
0.21.4 | 2023年7月17日 |
#8 in #shuttle
每月下载量 148次
26KB
456 行
shuttle-env-vars
一个库,用于在Shuttle项目中使用.env文件。
Shuttle Secrets是可行的,但有时您需要使用环境变量以便它们可以在其他crate中使用。
您可以使用Shuttle Secrets然后迭代密钥并将它们设置为环境变量,或者您可以使用这个crate。
用法
此crate利用Shuttle静态文件夹来读取.env文件并设置环境变量。
将以下内容添加到您的Cargo.toml
[dependencies]
shuttle-env-vars = "0.21.0"
然后,在您想使用的文件夹中创建一个.env文件。请注意,文件名可以是任何名字。
一旦创建了您的.env文件,您必须将以下参数添加到Shuttle main
函数中
#[shuttle_runtime::main]
async fn main(
#[shuttle_env_vars::EnvVars(folder = "name_of_your_folder", env_prod = "name_of_your_env_file")] _env_folder: PathBuf,
) -> __ { ... }
您的.env文件中定义的所有环境变量将自动设置。
请注意,我们正在使用PathBuf
作为参数的类型。这是由于Shuttle在处理自定义资源时当前的一个限制。如果您不打算做任何事情,可以忽略此参数。否则,如果存在任何.env文件,它将返回包含您的.env文件的文件夹的路径。
本地模式
如果您想在本地模式中使用特定的.env文件,可以使用.env_local参数
#[shuttle_runtime::main]
async fn main(
#[shuttle_env_vars::EnvVars(folder = "name_of_your_folder", env_prod = "name_of_your_env_file", env_local = "your_path_to_your_local_env_file")] _env_folder_¡: PathBuf,
) -> __ { ... }
在本地执行时,将忽略folder
和env_prod
,并仅使用env_local
。重要的是要注意,env_local
是一个指向文件的路径,而不是文件名。
默认值
所有参数都是可选的
- folder:这是包含您的.env文件的文件夹。默认值为.env。
- env_prod:生产环境中使用的
.env
文件名。默认为.env
。 - env_local:本地模式中使用的
.env
文件路径。这是一个可选参数,默认为None
。
忽略您的 .env 文件
通常,.env
文件不会被提交到您的仓库中,并且会被忽略。
这是一个好的实践,但对于 Shuttle 来说不起作用,因为它不会上传 .gitignore
文件中存在的文件。
为了解决这个问题,您可以查看 Shuttle Static Folder 中的 Caveats
部分,因为这正是我们需要做的事情。
我们需要创建一个名为 .ignore
的文件,并明确包含我们的 .env
文件。
例如,如果您有一个类似的 .gitignore
文件
dist/
static/
target/
.env*
然后,为了将 .env
文件夹和文件包含在最终的存档中,您必须创建一个类似的 .ignore
文件
!.env*
这样就可以解决问题了!
CI/CD
如果您在 CI/CD 管道中使用 Shuttle,您需要将 .env
文件添加到最终的存档中。
为了避免提交 .env
文件,一个解决方案是在您的 CI/CD 提供商中存储 .env
文件内容作为秘密,然后在 CI/CD 管道中创建 .env
文件。
例如,如果您使用 GitHub Actions,您可以这样做
- name: Set ENV vars file
shell: bash
run: |
mkdir .env
echo "${{ secrets.PROD_ENV_VARS }}" > .env/.env-prod
依赖关系
~30–47MB
~868K SLoC