1. 程式人生 > 其它 >ASP.NET Core – Work with Environment (Development, Staging, Production)

ASP.NET Core – Work with Environment (Development, Staging, Production)

前言

這篇講一講釋出和環境 (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>

這樣就可以了.