前言
这篇讲一讲发布和环境 (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>
这样就可以了.