#env-var #env #shuttle #dotenv #configuration

shuttle-env-vars

使用.env文件在Shuttle服务中设置环境变量

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

Download history • Rust 包仓库 271/week @ 2024-03-12 • Rust 包仓库 6/week @ 2024-04-02 • Rust 包仓库

每月下载量 148次

MIT 协议

26KB
456

shuttle-env-vars

license crates.io docs.rs

一个库,用于在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,
) -> __ { ... }

在本地执行时,将忽略folderenv_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