ASP.NET Core – Work with Environment (Development, Staging, Production)
阿新 • • 發佈:2022-05-12
前言
這篇講一講釋出和環境 (development, staging, production)
介紹
我的網站是 host 在 Azure 的 Virtual Machine, 跑 IIS, 沒有使用 docker, 就一個簡單方式而已.
通常網站會分 3 個階段
1. development 開發中
2. staging 測試中
3. production 最終使用版
不同環境使用不同的 appsetting 和 web.config. 程式碼則是同一份. 所以部分程式碼需要依據環境有所區別.
比如 staging 的時候可能不需要效能優化, 跑多點 log 是 ok 的, production 的時候效能就很重要了.
Get environment info
注入 IWebHostEnvironment 或者 IHostEnvironment 就可以獲取到環境資料了.
public class IndexModel : PageModel { private readonly IWebHostEnvironment _webHostEnvironment; public IndexModel( IWebHostEnvironment webHostEnvironment ) { _webHostEnvironment = webHostEnvironment; }public string Environment { get; set; } = ""; public void OnGet() { Environment = _webHostEnvironment.EnvironmentName; // "Development" | "Staging" | "Production" var isDevelopment = _webHostEnvironment.IsDevelopment(); var isStaging = _webHostEnvironment.IsStaging();var isProduction = _webHostEnvironment.IsProduction(); } }
HTML depend on environment
類似 swtich 的寫法
<environment include="Development"> <h1>Hello World – Develement</h1> </environment> <environment include="Staging"> <h1>Hello World – Staging</h1> </environment> <environment include="Production"> <h1>Hello World – Production</h1> </environment>
Web.config setup environment
我都是 publish to local folder, 然後通過 remote desktop 連結 Azure virtual machine 把 files copy/paste 進去釋出的
dotnet publish TestWebPublish.csproj -o C:\keatkeat\projects\release
執行完以後, 修改 web.config
本來是
<aspNetCore processPath="dotnet" arguments=".\TestPublish.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
換成
<aspNetCore processPath="dotnet" arguments=".\TestPublish.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess"> <environmentVariables> <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Staging" /> </environmentVariables> </aspNetCore>
這樣就可以了.