Azure App Service .net6 部署 - 错误:EISDIR:对目录进行非法操作,打开“/home/site/wwwroot/wwwroot/Identity/lib/bootstra

Posted

技术标签:

【中文标题】Azure App Service .net6 部署 - 错误:EISDIR:对目录进行非法操作,打开“/home/site/wwwroot/wwwroot/Identity/lib/bootstrap/LICENSE”【英文标题】:Azure App Service .net6 Deploy - Error: EISDIR: illegal operation on a directory, open '/home/site/wwwroot/wwwroot/Identity/lib/bootstrap/LICENSE' 【发布时间】:2021-12-26 05:32:20 【问题描述】:

我将我的 Asp.net 核心 Blazor WebAssembly 应用程序更新为 .net 6。一切都很好,但是从 github 操作的部署不起作用并引发此错误:

...
Copying file: 'Microsoft.AspNetCore.ApiAuthorization.IdentityServer.dll'
Copying file: 'Microsoft.AspNetCore.Authentication.JwtBearer.dll'
Omitting next output lines...
Error: EISDIR: illegal operation on a directory, open '/home/site/wwwroot/wwwroot/Identity/lib/bootstrap/LICENSE'
An error has occurred during web site deployment.
Kudu Sync failed
\n/opt/Kudu/Scripts/starter.sh "/home/site/deployments/tools/deploy.sh"
Error: Failed to deploy web package to App Service.
Error: Deployment Failed with Error: Package deployment using ZIP Deploy failed. Refer logs for more details.

这里可能有什么问题?

应用在本地运行 我在配置中将 azure 应用更新为 .net6 我尝试重新启动应用程序 该应用位于美国中部地区

编辑/解决方案

以前许可证文件的路径是:/home/site/wwwroot/wwwroot/Identity/lib/bootstrap/LICENSE/LICENSE 新文件没有 LICENSE 目录。因此,当新版本的应用程序到来时,它会尝试更新 LICENSE 文件,该文件实际上是一个目录。删除 LICENSE/LICENSE 有帮助。

【问题讨论】:

【参考方案1】:

我最终也删除了 /home/site/wwwroot/ 的内容来解决这个问题。在我的站点开始工作之前,我还需要将站点配置中的配置更新为 .NET 6 并重新部署。

【讨论】:

【参考方案2】:

在 Linux 上,任何运行的 bash 部署脚本都必须具有 Unix 行尾 (LF) 而不是 Windows 行尾 (CRLF),这一点很重要。

Kuduscript 将生成带有适合平台的行尾的脚本,但如果修改了这些脚本,或者如果您提供了自己的 custom deployment scripts,请务必确保您的编辑器不会更改行尾。

如果您的部署脚本出现问题,您可以随时使用 Kudu 控制台删除 /home/site/deployments/tools 的内容。

这是 Kudu 缓存 kuduscript 生成的部署脚本的目录。在下一次部署时,脚本将重新生成。

您当前看到的错误是运行 node/npm 进行部署的 Kudu 问题。

您目前看到的最简单和最快的解决方案是在您的 package.json 中指定 engines.node。

错误:EISDIR:对目录的非法操作,打开“/home/site/wwwroot/wwwroot/Identity/lib/bootstrap/LICENSE”

EISDIR 代表“错误,是目录”。这意味着 NPM 正在尝试对文件执行某些操作,但它是一个 目录。在您的情况下,NPM 正在尝试“读取”作为目录的文件。由于无法完成操作,因此会引发错误。

这里要确保的三件事

    确保文件存在。如果没有,您需要创建它。 (如果 NPM 依赖于文件中的任何特定信息,则您需要在其中拥有该信息)。 确保它实际上是一个文件而不是一个目录。 它具有正确的权限。您可以使用“sudo chmod 777 FILE_NAME”将文件更改为拥有所有权限。

注意:您正在为该文件上的每个人授予读取、写入和执行权限。

【讨论】:

你为我指明了正确的方向。问题编辑中的更多详细信息。

以上是关于Azure App Service .net6 部署 - 错误:EISDIR:对目录进行非法操作,打开“/home/site/wwwroot/wwwroot/Identity/lib/bootstra的主要内容,如果未能解决你的问题,请参考以下文章

Azure App Service 与 Azure Service Fabric [关闭]

Python app in Azure App Service on Linux初探

如何将Azure DevOps中的代码发布到Azure App Service中

Azure App Service

Web API系列教程3.10 — 实战:处理数据(发布App到Azure App Service)

如何处理 Azure App Service WebSockets 超时?