问题描述
在进行Azure App Service部署时,有时会遇到文件被应用服务使用,因此无法用新版本进行覆盖的问题。对于这个问题,有多个解决建议。用户正在探索使用本地缓存选项,以解决不同的问题。然而,他发现本地缓存选项与直接从ZIP运行的功能不兼容。
他理解使用本地缓存时,代码的ZIP包会被部署到存储帐户,然后在应用服务重启时加载到内存中。他想知道,使用本地缓存是否消除了文件被锁定的问题,因为代码不是从与部署位置相同的位置运行的。
解决方案
请注意以下操作中的版本差异及修改前的备份。
使用本地缓存解决文件被锁定问题
如果你采用了建议的设置,可以通过以下步骤在Azure App Service中使用本地缓存解决文件被锁定的问题:
- 确保你的App Service中有Staging和Production slots。
- 在Staging slot中禁用本地缓存,而在Production slot中启用本地缓存。
- 设置以下属性为“Slot setting”或“Sticky setting”:WEBSITE_LOCAL_CACHE_OPTION、WEBSITE_LOCAL_CACHE_SIZEINMB。
- 将代码部署到Staging slot。
- 将Staging slot与Production slot进行交换。
针对Staging的部署步骤
对于部署到Staging的操作,可以按照以下步骤进行:
- 通过引入App_Offline.htm文件(可以通过POST到SCM URI或作为部署的一部分)来关闭Staging slot。
- 在清理之前等待Staging slot停止(通过探测Staging slot的URL)。
- 清理wwwroot目录(通过POST到SCM URI)。这样可以清除未使用的文件。由于部署不是增量的,因此如果需要清理旧文件,可以引入此步骤。
- 使用
az webapp deployment source config-zip
命令将代码部署到Staging slot。 - 移除App_Offline.htm文件(通过POST到SCM URI)。
针对Slot的交换步骤
进行交换时,可以按照以下步骤进行:
- 确保Staging slot已经准备就绪(通过探测Staging slot的URL)。在触发Staging部署环境时,需要等待Staging完全启动和加载,然后才进行交换,否则可能会出现问题。
- 使用
az webapp deployment slot swap
命令进行交换。
如果直接部署到Production slot,并在部署后立即重启(由于启用了本地缓存),那么是的,使用这种方法应该不会出现文件锁定问题。但与部署到Staging slot并进行交换相比,这会导致部署期间的停机时间。
正文完