Konfiguration von Rust-Anwendungen: Bibliotheken config, envy und dotenvy

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Konfiguration von Rust-Anwendungen: Bibliotheken config, envy und dotenvy



Bei der Entwicklung von Anwendungen in Rust ist die Konfigurationsverwaltung eine der zentralen Aufgaben. Von der richtigen Herangehensweise an das Laden von Einstellungen hängen Flexibilität, Sicherheit und Benutzerfreundlichkeit der Bereitstellung ab. Im Rust-Ökosystem gibt es mehrere ausgereifte Lösungen, die das Lesen von Konfigurationen aus Dateien, Umgebungsvariablen und anderen Quellen ermöglichen. In diesem Artikel betrachten wir drei beliebte Werkzeuge: config, envy und dotenvy.



1. Bibliothek config – universeller Konfigurationsmanager



config ist eine leistungsstarke Bibliothek zum Laden hierarchischer Konfigurationen. Sie unterstützt mehrere Formate (JSON, TOML, YAML, HJSON, INI) sowie Umgebungsvariablen und entfernte Quellen. Die Grundidee besteht darin, alle Quellen in einem einzigen Einstellungsbaum zu vereinen.



Installation

[dependencies]config = "0.14"serde = { version = "1.0", features = ["derive"] }


Anwendungsbeispiel

use config::{Config, File, Environment};use serde::Deserialize;

#[derive(Debug, Deserialize)]struct AppConfig { server: ServerConfig, database: DatabaseConfig,}

#[derive(Debug, Deserialize)]struct ServerConfig { host: String, port: u16,}

#[derive(Debug, Deserialize)]struct DatabaseConfig { url: String, pool_size: u32,}

fn load_config() -> Result<AppConfig, config::ConfigError> { let cfg = Config::builder() .add_source(File::with_name("config/default")) // Basiseinstellungen .add_source(File::with_name("config/local").required(false)) // Lokale Überschreibungen .add_source(Environment::with_prefix("APP")) // Umgebungsvariablen mit Präfix APP_ .build()?;

cfg.try_deserialize()}

fn main() { match load_config() { Ok(config) => println!("Geladene Konfiguration: {:?}", config), Err(e) => eprintln!("Konfigurationsfehler: {}", e), }}


Die Bibliothek führt Quellen automatisch zusammen: Werte aus späteren Quellen überschreiben frühere. Dies ermöglicht eine einfache Hierarchie: default → environment → local override.



2. Bibliothek envy – Konfiguration aus Umgebungsvariablen



envy ist eine minimalistische Bibliothek, die Konfigurationen ausschließlich aus Umgebungsvariablen lädt. Ideal für 12-Faktor-Anwendungen, bei denen Einstellungen vom Code getrennt sein sollten.



Installation

[dependencies]envy = "0.4"serde = { version = "1.0", features = ["derive"] }


Anwendungsbeispiel

use serde::Deserialize;

#[derive(Debug, Deserialize)]struct AppConfig { #[serde(rename = "SERVER_HOST")] host: String, #[serde(rename = "SERVER_PORT")] port: u16, #[serde(rename = "DATABASE_URL")] db_url: String,}

fn load_config() -> Result<AppConfig, envy::Error> { envy::from_env::<AppConfig>()}

fn main() { match load_config() { Ok(config) => println!("Umgebungskonfiguration: {:?}", config), Err(e) => eprintln!("Envy-Fehler: {}", e), }}


Für die Nutzung reicht es, die Umgebungsvariablen zu setzen:

export SERVER_HOST=127.0.0.1export SERVER_PORT=8080export DATABASE_URL=postgres://user:pass@localhost/db


envy unterstützt verschachtelte Strukturen durch Trennzeichen (z. B. DATABASE__HOST) sowie optionale Felder mit Standardwerten.



3. Bibliothek dotenvy – Laden von .env-Dateien



dotenvy ist ein Fork der beliebten Bibliothek dotenv, der zum Laden von Umgebungsvariablen aus .env-Dateien dient. Besonders nützlich während der Entwicklung, wenn lokale Einstellungen schnell festgelegt werden müssen.



Installation

[dependencies]dotenvy = "0.15"<                    

Empfehlungen