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/dbenvy 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"< Auch in der Bibliothek
Elasticsearch-Client für Rust: Überblick über die Bibliothek elasticsearch-rs
Autorisierung und Authentifizierung in JavaScript (Node.js): vollständiger Leitfaden
fx für Go: vollständiges Tutorial mit Beispielen
Play Services für Kotlin: Komplettes Tutorial mit Beispielen
HTML-Parsing in PHP: DOMDocument, SimpleXML und cURL für Web-Scraping