یاد بگیرید که چگونه از ماژول dotenv crate و std::env برای تعامل با متغیرهای محیط در Rust و مدیریت اطلاعات حساس استفاده کنید.
متغیرهای محیطی نقش مهمی در پیکربندی و سفارشی کردن رفتار نرمافزارهای امروزی ایفا میکنند و روشی انعطافپذیر برای انتقال اطلاعات به برنامهها بدون مقادیر کدگذاری سخت ارائه میدهند.
متغیرهای محیطی جفتهای کلید-مقدار پویا هستند که در محیط یک سیستم عامل یا یک فایل متغیر محیطی برای دسترسی در زمان اجرا تنظیم شدهاند. بر خلاف مقادیر کدگذاری شده، متغیرهای محیطی انعطاف پذیری و سازگاری بیشتری را فراهم می کنند زیرا می توانید به راحتی آنها را تغییر دهید.
بستهها و ماژولهای زیادی برای تعامل با متغیرهای محیطی در اکوسیستم Rust وجود دارد، از جمله جعبههای شخص ثالث dotenv، envy و پیکربندی، و از ماژول std::env داخلی Rust استفاده میکنند.
معرفی جعبه dotenv
جعبه dotenv یک ابزار ارزشمند برای مدیریت متغیرهای محیطی در پروژه Rust شما است. جعبه dotenv یکپارچه سازی ساده و توابع آسان برای استفاده را فراهم می کند که فرآیند بارگیری و دسترسی به متغیرهای محیط را از فایل های متغیرهای محیطی ساده می کند.
ویژگیهای جعبه dotenv شامل بارگذاری یکپارچه متغیر محیطی، رویکردهای رسیدگی به خطا برای متغیرهای گمشده، عملکرد متقابل با ماژول std::env و موارد دیگر است.
برای شروع تعامل با متغیرهای محیطی با استفاده از بسته، جعبه dotenv را به بخش وابستگیهای فایل Cargo.toml خود اضافه کنید.
[dependencies]
dotenv = "0.15.0"
این دستور را در ترمینال فهرست پروژه خود اجرا کنید تا یک فایل متغیرهای محیطی ایجاد کنید و یک جفت کلید-مقدار را وارد کنید.
echo DATABASE_URL=database.db > .env
در اینجا نحوه بارگیری فایل محیط و بازیابی مقدار یک جفت از فایل (در این مورد، مقدار کلید DATABASE_URL:
use std::env;
use dotenv::dotenv;
fn main() {
dotenv().ok(); // Load the .env file
// Read the value from the .env file
let database_url = env::var("DATABASE_URL").expect("You've not set the DATABASE_URL");
// Print the value
println!("Database URL: {}", database_url);
}
تابع main فایل .env را با تابع ok بارگیری می کند، مقدار را از فایل با تابع env::var می خواند و خطاهای احتمالی را با تابع expect کنترل می کند.
مقدمه ای بر ماژول std::env
از طرف دیگر، به جای استفاده از بسته های شخص ثالث، می توانید از ماژول std::env داخلی Rust برای خواندن متغیرهای محیطی از دستگاه خود استفاده کنید.
ابتدا باید ماژول env را در فایل Rust خود به این صورت وارد کنید:
use std::env;
پس از وارد کردن ماژول std::env، می توانید متغیرهای محیط را بخوانید و بنویسید.
در اینجا نحوه خواندن متغیر محیطی PWD (Present Working Directory) با ماژول std::env آمده است.
use std::env;
fn main() {
// Retrieve the value of the "PWD" environment variable
let variable = env::var("PWD").expect("Error: Working directory environment variable not found");
// Print the value associated with the "PWD" key
println!("Value associated with the PWD key: {}", variable);
}
تابع main مقدار مربوط به کلید PWD را پس از بازیابی متغیر با تابع env::var چاپ می کند.
همچنین، میتوانید از تابع set_var ماژول std::env برای تنظیم متغیرهای محیطی استفاده کنید.
use std::env;
fn main() -> Result<(), Box<dyn std::error::Error>> {
// Set the environment variable "DATABASE_URL" to "database.db"
env::set_var("DATABASE_URL", "database.db");
// Retrieve the value of the "DATABASE_URL" environment variable
let env_variable = env::var("DATABASE_URL");
// Check if retrieving the environment variable was successful
if env_variable.is_err() {
// If the environment variable was not found, print an error message
println!("Error: DATABASE_URL not found");
} else {
// If the environment variable was found, print its value
println!("DATABASE_URL set to: {}", env_variable.unwrap());
}
Ok(())
}
تابع main متغیر محیطی را با تابع set_var که جفت کلید-مقدار را می گیرد، تنظیم می کند. پس از تنظیم متغیر محیطی، تابع مقدار مربوط به کلید را چاپ می کند.
متغیرهای محیطی همه کاره هستند
متغیرهای محیطی ابزار ارزشمندی برای مدیریت دادههای پویا هستند. آنها توسعه آزمایش محور را تسهیل می کنند زیرا می توانید به راحتی داده ها را تغییر دهید و موارد آزمایشی را برای چندین سناریو اجرا کنید.
با استفاده از متغیرهای محیطی، میتوانید از اطلاعات حساس کدگذاری سخت مانند نامهای کاربری پایگاه داده، گذرواژهها و URLهای اتصال مستقیماً به کد منبع جلوگیری کنید، بنابراین امنیت برنامه خود را افزایش دهید و در عین حال امکان مدیریت پیکربندی آسانتر را فراهم کنید.