হ্যালো হাসিব! তুমি এখন Section 13: Environments-এর দ্বিতীয় লেকচার “Environment in Launch Settings” (Lecture 144)-এ আছো।
আগের লেকচারে আমরা Environment-এর বেসিক থিওরি জেনেছিলাম। আজকের লেকচারে আমরা প্র্যাকটিক্যালি দেখবো ভিজ্যুয়াল স্টুডিওতে কীভাবে launchSettings.json ফাইলের মাধ্যমে Environment সেট করতে হয় এবং Program.cs ফাইলে সেই Environment চেক করে কীভাবে Developer Exception Page অন বা অফ করতে হয়।
চলো, পুরো লেকচারটি বিস্তারিতভাবে ডিকোড করি।
সারসংক্ষেপ (Quick Revision List)
- Set Environment: ASP.NET Core প্রোজেক্টে লোকাল ডেভেলপমেন্টের সময় Environment সেট করা হয়
Properties/launchSettings.jsonফাইলেASPNETCORE_ENVIRONMENTভ্যারিয়েবল ব্যবহার করে। - Read Environment:
Program.csফাইলেapp.Environment.IsDevelopment()বাIsStaging()মেথড ব্যবহার করে কারেন্ট Environment চেক করা যায়। - Custom Environment: বিল্ট-ইন ৩টি Environment ছাড়াও
app.Environment.IsEnvironment("CustomName")ব্যবহার করে যেকোনো কাস্টম Environment চেক করা যায়। - The Main Benefit: Environment চেক করার সবচেয়ে বড় সুবিধা হলো— Development-এ ডিটেইলড এরর (Exception) পেজ দেখানো যায়, কিন্তু Production-এ তা হাইড করে রাখা যায়।
Comprehensive Breakdown
১. launchSettings.json ফাইলে Environment সেট করা [Priority: 10/10]
যখন তুমি ভিজ্যুয়াল স্টুডিও দিয়ে একটি ASP.NET Core প্রোজেক্ট তৈরি করো, তখন Properties ফোল্ডারের ভেতরে launchSettings.json নামে একটি ফাইল অটোমেটিক তৈরি হয়। এই ফাইলে তোমার প্রোজেক্ট রান করার বিভিন্ন প্রোফাইল (যেমন: IIS Express বা Kestrel) থাকে।
এই ফাইলের ভেতরেই environmentVariables সেকশনে আমরা আমাদের Environment সেট করি।
Code Implementation (Properties/launchSettings.json):
"profiles": {
"EnvironmentsExample": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "http://localhost:5000",
"environmentVariables": {
// এখানেই আমরা Environment সেট করি
"ASPNETCORE_ENVIRONMENT": "Development" // বা "Staging", "Production"
}
}
}
২. Program.cs ফাইলে Environment চেক করা [Priority: 10/10]
অ্যাপ্লিকেশন রান হওয়ার সময় Program.cs ফাইলে আমরা চেক করি যে এটি কোন Environment-এ চলছে। এর জন্য app.Environment প্রপার্টি ব্যবহার করা হয় (যার টাইপ হলো IWebHostEnvironment)।
Code Implementation (Program.cs):
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllersWithViews();
var app = builder.Build();
// ১. Environment চেক করা হচ্ছে
if (app.Environment.IsDevelopment())
{
// ২. যদি Development হয়, তবে ডিটেইলড এরর পেজ (Developer Exception Page) অন হবে
app.UseDeveloperExceptionPage();
}
else
{
// Production বা Staging হলে ইউজার-ফ্রেন্ডলি এরর পেজ দেখাবে
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseRouting();
app.MapControllers();
app.Run();
৩. The Magic of UseDeveloperExceptionPage() [Priority: 10/10]
লেকচারার ইচ্ছা করে একটি এরর তৈরি করেছেন (একই রাউট দুটি Action Method-এ দিয়ে)।
- When Environment = Staging: তুমি যদি
launchSettings.jsonএ Environment-এর নাম “Staging” বা “Production” দাও এবং ব্রাউজারে রিফ্রেশ দাও, দেখবে ব্রাউজারে ব্ল্যাঙ্ক (Blank) পেজ বা শুধুHTTP 500 Internal Server Errorদেখাচ্ছে। কোডের কোনো ডিটেইলস নেই। (এটি হ্যাকারদের থেকে কোড হাইড করে)। - When Environment = Development: তুমি যদি Environment-এর নাম “Development” দাও, তখন স্ক্রিনে একটি বিশাল হলুদ-সাদা রঙের পেজ আসবে। সেখানে লেখা থাকবে এররটি কেন হয়েছে (যেমন:
AmbiguousMatchException), কোন ফাইলের কত নম্বর লাইনে হয়েছে, রিকোয়েস্টের হেডার কী ছিল ইত্যাদি। এটি ডেভেলপারদের ডিবাগ (Debug) করার জন্য অসাধারণ একটি টুল।
৪. Custom Environments চেক করা [Priority: 7/10]
ধরো তুমি launchSettings.json-এ Environment-এর নাম দিয়েছো "Beta"।
যেহেতু IsBeta() নামে কোনো বিল্ট-ইন মেথড নেই, তাই তোমাকে IsEnvironment() মেথড ব্যবহার করতে হবে।
Code Implementation:
if (app.Environment.IsEnvironment("Beta"))
{
// Beta Environment-এর জন্য স্পেসিফিক লজিক
}
৫. IWebHostEnvironment-এর অন্যান্য প্রপার্টি [Priority: 6/10]
app.Environment (যার টাইপ IWebHostEnvironment) থেকে আমরা শুধু Environment-এর নামই পাই না, আরও কিছু দরকারি তথ্যও পাই:
app.Environment.EnvironmentName: এটি বর্তমান Environment-এর নামটি স্ট্রিং আকারে রিটার্ন করে (যেমন: “Development”)।app.Environment.ContentRootPath: এটি তোমার প্রোজেক্ট ফোল্ডারের রুট পাথ (যে ফোল্ডারেProgram.csআছে) রিটার্ন করে।
VS / VS Code Shortcuts
- Network Tab Open: ব্রাউজারে
Ctrl + Shift + I(বাF12) চাপলে Developer Tools ওপেন হয়। নেটওয়ার্ক (Network) ট্যাবে গেলে তুমি দেখতে পাবে রিকোয়েস্টের স্ট্যাটাস কোড (যেমন500বা200) কী আসছে।
Best Practices & .NET 10 Context
Best Practices for Launch Settings:
- Do not commit production secrets in
launchSettings.json: এই ফাইলটি শুধু লোকাল ডেভেলপমেন্টের জন্য। প্রোডাকশন সার্ভারে এই ফাইলের কোনো ভ্যালু থাকে না। তাই প্রোডাকশন ডাটাবেসের পাসওয়ার্ড এখানে সেভ করবে না। - ASPNETCORE_ vs DOTNET_: লেকচারার বলেছেন,
DOTNET_ENVIRONMENTএবংASPNETCORE_ENVIRONMENTদুটির যেকোনো একটি ব্যবহার করা যায়। তবে ASP.NET Core ওয়েব অ্যাপ্লিকেশনের জন্য সবসময়ASPNETCORE_ENVIRONMENTব্যবহার করবে। যদি দুটিই থাকে, তবেASPNETCORE_ENVIRONMENTআগেরটিকে ওভাররাইড (Override) করবে।
.NET 10 Context:
ASP.NET Core 10-এ Environment চেক করা এবং launchSettings.json-এর মেকানিজম .NET Core এর শুরু থেকেই ১০০% সেম এবং অপরিবর্তিত আছে।
তবে .NET 8/10-এ তুমি যদি WebApplication.CreateBuilder(args) কল করো, ফ্রেমওয়ার্ক নিজে থেকেই Development Environment-এর জন্য UseDeveloperExceptionPage() কল করে নেয়। তাই অনেক সময় তোমাকে ম্যানুয়ালি if (app.Environment.IsDevelopment()) লিখে এটি কল করতে হয় না। তবুও ক্লিন কোড এবং কাস্টমাইজেশনের জন্য ম্যানুয়ালি লেখাটাই ভালো প্র্যাকটিস।
হাসিব, launchSettings.json দিয়ে Environment সেট করার কনসেপ্ট কি ক্লিয়ার হয়েছে? রেডি থাকলে আমরা নেক্সট লেকচার “Environment in Controller”-এ মুভ করতে পারি, যেখানে আমরা দেখবো Controller-এর ভেতরে কীভাবে Environment চেক করতে হয়!