Azure App Service部署时如何解决文件被锁定的问题

42次阅读
没有评论

问题描述

在进行Azure App Service部署时,有时会遇到文件被应用服务使用,因此无法用新版本进行覆盖的问题。对于这个问题,有多个解决建议。用户正在探索使用本地缓存选项,以解决不同的问题。然而,他发现本地缓存选项与直接从ZIP运行的功能不兼容。

他理解使用本地缓存时,代码的ZIP包会被部署到存储帐户,然后在应用服务重启时加载到内存中。他想知道,使用本地缓存是否消除了文件被锁定的问题,因为代码不是从与部署位置相同的位置运行的。

解决方案

请注意以下操作中的版本差异及修改前的备份。

使用本地缓存解决文件被锁定问题

如果你采用了建议的设置,可以通过以下步骤在Azure App Service中使用本地缓存解决文件被锁定的问题:

  1. 确保你的App Service中有Staging和Production slots。
  2. 在Staging slot中禁用本地缓存,而在Production slot中启用本地缓存。
  3. 设置以下属性为“Slot setting”或“Sticky setting”:WEBSITE_LOCAL_CACHE_OPTION、WEBSITE_LOCAL_CACHE_SIZEINMB。
  4. 将代码部署到Staging slot。
  5. 将Staging slot与Production slot进行交换。

针对Staging的部署步骤

对于部署到Staging的操作,可以按照以下步骤进行:

  1. 通过引入App_Offline.htm文件(可以通过POST到SCM URI或作为部署的一部分)来关闭Staging slot。
  2. 在清理之前等待Staging slot停止(通过探测Staging slot的URL)。
  3. 清理wwwroot目录(通过POST到SCM URI)。这样可以清除未使用的文件。由于部署不是增量的,因此如果需要清理旧文件,可以引入此步骤。
  4. 使用az webapp deployment source config-zip命令将代码部署到Staging slot。
  5. 移除App_Offline.htm文件(通过POST到SCM URI)。

针对Slot的交换步骤

进行交换时,可以按照以下步骤进行:

  1. 确保Staging slot已经准备就绪(通过探测Staging slot的URL)。在触发Staging部署环境时,需要等待Staging完全启动和加载,然后才进行交换,否则可能会出现问题。
  2. 使用az webapp deployment slot swap命令进行交换。

如果直接部署到Production slot,并在部署后立即重启(由于启用了本地缓存),那么是的,使用这种方法应该不会出现文件锁定问题。但与部署到Staging slot并进行交换相比,这会导致部署期间的停机时间。

正文完