Configuração e Design de Funcionalidades
Separe funcionalidades do Cargo em tempo de compilação de configurações em tempo de execução. Carregue as configurações uma vez na inicialização com validação; controle integrações opcionais com funcionalidades.
Receita
[features]
default = ["metrics"]
metrics = ["dep:prometheus"]#[derive(serde::Deserialize)]
struct Settings {
database_url: String,
port: u16,
}Quando usar isso: Implantações multi-ambiente e backends opcionais em tempo de compilação.
Exemplo de Trabalho
let settings = Settings::parse()?; // env + defaults
let pool = PgPoolOptions::new().connect(&settings.database_url).await?;
#[cfg(feature = "metrics")]
prometheus::init();Settingsvalida o intervalo de portas emparse()- Segredos do ambiente em produção,
.envapenas localmente - Funcionalidade
metricsreduz dependências em compilações mínimas
Mergulho Profundo
O crate config sobrepõe arquivos: config/default.toml + config/production.toml + substituições de ambiente. Documente cada variável de ambiente no README.
Armadilhas
- Flags de funcionalidade em tempo de execução como funcionalidades do Cargo - requer recompilação. Correção: configuração em tempo de execução para alternâncias de operações.
- Segredos em default.toml - risco de vazamento. Correção: segredos apenas via ambiente.
- Explosão de funcionalidades - dor de cabeça para CI matricial. Correção: agrupe funcionalidades
full,minimal. - Clonagem parcial de configurações - configuração desatualizada. Correção: política de recarga
Arc<Settings>documentada. - Sem validação - inicialização em produção com porta 0. Correção:
deny_unknown_fields+ função de validação.
Alternativas
| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
| figment | fontes sobrepostas | CLI minúscula |
| clap env | Híbrido CLI+servidor | muitas configurações aninhadas |
FAQs
recarregar configuração?
Recarga SIGHUP para campos não secretos; segredos exigem reinicialização.
12-factor?
Toda a configuração no ambiente; arquivos apenas para desenvolvimento local.
configuração de teste?
Settings::test() com URLs fictícias no módulo de testes.
mesclar clap?
Achatamento de substituições da CLI sobre Settings para ferramentas administrativas.
documentação de funcionalidades?
Matriz do README: funcionalidade -> dependências -> caso de uso.
configuração wasm?
Incorporar configuração na compilação ou injeção de JS em tempo de execução.
k8s configmap?
Montar arquivos lidos pelo caminho do crate config.
ambiente de pré-visualização?
Namespace separado + prefixo de configurações por ambiente.
auditar configurações?
Registrar configuração efetiva não secreta na inicialização (redigida).
renomear configurações que quebram?
Suportar alias antigo de ambiente por uma release com log de depreciação.
Relacionados
- Funcionalidades e Dependências Opcionais
- Configuração e Ambiente
- Checklist de Decisão de Arquitetura
- Noções Básicas de Implantação
Versões do Stack: Esta página foi escrita para Rust 1.97.0 (edição 2024), Tokio 1.x, Axum 0.8, serde 1.0, sqlx 0.8, clap 4, e Polars 0.46+.