loco 的配置位于 config/ 中,默认情况下设置 3 种不同的环境:

config/
  development.yaml
  production.yaml
  test.yaml

环境的选择依据如下:

  • 命令行标志:cargo loco start --environment production,如果没有给出,则回退到
  • LOCO_ENVRAILS_ENVNODE_ENV

如果没有给出,则默认值为 development

Loco 框架除了默认环境之外,还支持自定义环境。要添加自定义环境,请创建一个配置文件,其名称与前面示例中使用的环境标识符匹配。

配置中的占位符/变量

可以将值注入到配置文件中。在此示例中,我们从 NODE_PORT 环境变量获取端口值:

# config/development.yaml
# 每个配置文件都是有效的 Tera 模板
server:
  # 服务器将侦听的端口。服务器绑定为 0.0.0.0:{PORT}
  port:  {{ get_env(name="NODE_PORT", default=3000) }}
  # 邮件发送者将指向的 UI 主机名或 IP 地址。
  host: http://localhost
  # 开箱即用的中间件配置。要禁用中间件,您可以将 `enable` 字段更改为 `false` 或注释掉中间件块

get_env 函数是 Tera 模板引擎的一部分。请参阅 Tera 文档以了解您可以使用什么更多内容。

示例

假设您想添加一个“qa”环境。在 config 文件夹中创建一个 qa.yaml 文件:

config/
  development.yaml
  production.yaml
  test.yaml
  qa.yaml

要使用“qa”环境运行应用程序,请执行以下命令:

$ LOCO_ENV=qa cargo loco start

设置

配置文件包含用于设置 Loco 应用程序。您还可以拥有自定义设置,具体请见 settings: 块。

# 在 config/development.yaml 中
添加 `settings:` 块
settings:
  allow_list:
    - google.com
    - apple.com
logger:
  # ...

这些设置将以 serde_json::Value 的形式显示在 ctx.config.settings 中。您可以通过添加结构来创建强类型设置:

// 将此内容放入 src/common/settings.rs 中
#[derive(Serialize, Deserialize, Default, Debug)]
pub struct Settings {
    pub allow_list: Option<Vec<String>>,
}

impl Settings {
    pub fn from_json(value: &serde_json::Value) -> Result<Self> {
        Ok(serde_json::from_value(value.clone())?)
    }
}

然后,您可以像这样从任何地方访问设置:

// 在控制器、工作程序、任务或其他地方,
// 只要您可以访问 AppContext(此处:`ctx`)

if let Some(settings) = &ctx.config.settings {
    let settings = common::settings::Settings::from_json(settings)?;
    println!("允许列表:{:?}", settings.allow_list);
}

日志系统

除了 YAML 文件中 logger: 小节中带注释的字段之外,这里还有一些信息:

  • logger.pretty_backtrace - 将显示没有噪声的彩色回溯,以便获得很好的开发体验。请注意,这会强制将 RUST_BACKTRACE=1 设置到进程的环境变量中,这会针对特定错误启用(成本高昂的)回溯捕获。在开发中启用此功能,在生产中禁用此功能。如果需要在生产中使用,请在命令行中临时使用 RUST_BACKTRACE=1 来显示它。
  • Rust 的日志记录 - 如何上手? - 更多在 rust 中使用日志系统的指南

有关所有可用配置选项,请点击此处:点我跳转