Rust में एप्लिकेशन कॉन्फ़िगरेशन: config और dotenv लाइब्रेरीज़

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Rust एप्लिकेशन कॉन्फ़िगरेशन: config और dotenv लाइब्रेरीज़



किसी भी आधुनिक एप्लिकेशन को एक लचीली कॉन्फ़िगरेशन प्रणाली की आवश्यकता होती है: डेटाबेस सेटिंग्स, API-कुंजियाँ, सर्वर पोर्ट, लॉगिंग स्तर और अन्य पैरामीटर। Rust इकोसिस्टम में इसके लिए शक्तिशाली उपकरण हैं — config और dotenv क्रेट्स। ये विभिन्न स्रोतों (फ़ाइलें, पर्यावरण चर, कमांड लाइन आर्गुमेंट्स) से सेटिंग्स को एक एकल टाइप-सेफ संरचना में संयोजित करने की अनुमति देते हैं।



एक अलग लाइब्रेरी की आवश्यकता क्यों?

Rust एक मजबूत स्थैतिक टाइपिंग वाली भाषा है। std::env::var() से केवल स्ट्रिंग पढ़ने से कई मैन्युअल जाँच और रूपांतरण होते हैं। config लाइब्रेरी इस प्रक्रिया को स्वचालित करती है:

  • प्रारूपों के लिए समर्थन: YAML, JSON, TOML, HJSON, INI, RON
  • ओवरराइड करने की क्षमता के साथ पदानुक्रमित सेटिंग्स संरचना
  • serde के माध्यम से उपयोगकर्ता-परिभाषित संरचनाओं में स्वचालित डिसीरियलाइज़ेशन
  • प्राथमिकता के साथ कई स्रोतों का संयोजन (फ़ाइल < env < CLI)


स्थापना

Cargo.toml में जोड़ें:

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


मूल उदाहरण: फ़ाइल और env से पढ़ना

एप्लिकेशन कॉन्फ़िगरेशन के लिए एक संरचना बनाएँ:

use serde::Deserialize;use config::Config;

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

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

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

fn main() -> Result<(), config::ConfigError> { // कॉन्फ़िगरेशन लोड करें let config = Config::builder() .add_source(config::File::with_name("config/default")) .add_source(config::Environment::with_prefix("APP")) .build()?;

let app_config: AppConfig = config.try_deserialize()?; println!("{:#?}", app_config); Ok(())}


फ़ाइल config/default.toml:

[server]host = "127.0.0.1"port = 8080workers = 4

[database]url = "postgres://localhost/mydb"pool_size = 10


APP_ उपसर्ग वाले पर्यावरण चर फ़ाइल से मानों को ओवरराइड करते हैं। उदाहरण के लिए, APP_DATABASE__URL डेटाबेस URL बदल देगा।



dotenv के साथ काम करना

विकास की सुविधा के लिए अक्सर .env फ़ाइल का उपयोग किया जाता है। dotenv क्रेट config को आरंभ करने से पहले इसे पर्यावरण चर में लोड करता है:

use dotenv::dotenv;

fn main() { dotenv().ok(); // .env लोड करें // फिर ऊपर दिए गए उदाहरण की तरह config आरंभ करें}


.env की सामग्री:

APP_SERVER__PORT=3000APP_DATABASE__POOL_SIZE=20


उन्नत परिदृश्य: कई स्रोत

वास्तविक प्रोजेक्ट्स में विभिन्न स्थानों से सेटिंग्स के संयोजन की आवश्यकता होती है। config प्राथमिकता के साथ स्रोतों की एक श्रृंखला निर्दिष्ट करने की अनुमति देता है:

let config = Config::builder()    // मूल सेटिंग्स (निम्न प्राथमिकता)    .add_source(config::File::with_name("config/default"))    // विशिष्ट वातावरण के लिए ओवरराइड    .add_source(config::File::with_name(&format!("config/{}", env::var("APP_ENV").unwrap_or("development"))))    // पर्यावरण चर (मध्यम प्राथमिकता)    .add_source(config::Environment::with_prefix("APP"))    // कमांड लाइन आर्गुमेंट्स (उच्च प्राथमिकता)    .add_source(config::File::from(std::env::args().nth(1).unwrap_or_default()))    .build()?;


Best Practices

  • पर्यावरण चर के लिए उपसर्गों का उपयोग करें ताकि सिस्टम चर के साथ टकराव से बचा जा सके

अनुशंसाएँ