在 AWS Elastic Beanstalk 中找不到文件

问题描述 投票:0回答:1

我有一个网站,可以读取存储在一个文件夹中的文本文件。本地主机中一切正常。但是当我尝试在 AWS Elastic Beanstalk 中部署它时,使用该文本文件的页面会产生错误。查看环境日志,上面写着:

An unhandled exception has occurred while executing the request.

Exception:  System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\inetpub\AspNetCoreWebApps\MainApp\Design Tools\Resources\Steel Sections\AISCDatabaseV15.txt'.

我使用以下代码指向该文件:

var fileName = Environment.CurrentDirectory + "/Design Tools/Resources/Steel Sections/AISCDatabaseV15.txt";

如何在 AWS Beanstalk 中找到该文件?

c# asp.net-mvc amazon-web-services amazon-elastic-beanstalk
1个回答
0
投票

当您将应用程序部署到AWS Elastic Beanstalk时,环境和文件系统结构与您本地的开发环境不同。以下是解决此问题的方法:

  1. 使用相对路径:

    • 通常最好使用基于应用程序二进制文件位置或部署环境中已知目录结构的相对路径,而不是使用
      Environment.CurrentDirectory
  2. 调整AWS环境的路径:

    • 您使用的路径 (
      C:\inetpub\AspNetCoreWebApps\MainApp\...
      ) 是 Windows 特定的路径,并且您的 Elastic Beanstalk 环境中可能不存在。 AWS Elastic Beanstalk 默认使用 Linux 服务器,但也可以使用 Windows 服务器。
    • 如果使用 Linux 服务器,您的目录结构将会有所不同。通常,您的应用程序将位于类似
      /var/app/current/
      的目录下。
  3. 使用您的应用程序部署文件:

    • 确保文本文件包含在您的部署包中。如果您通过 ZIP 文件或 CI/CD 管道进行部署,则文本文件需要成为此包的一部分。
  4. 在代码中访问文件:

    • 您可以将文件访问代码修改为与环境更加无关的代码。例如,您可以将该文件放置在与应用程序可执行文件相关的目录中,并按如下方式访问它:

      var basePath = AppDomain.CurrentDomain.BaseDirectory;
      var filePath = Path.Combine(basePath, "Design Tools/Resources/Steel Sections/AISCDatabaseV15.txt");
      

      这将根据应用程序运行的目录构建路径。

对于 Elastic Beanstalk Windows 环境:

  1. Windows 目录: 了解文件通常位于

    C:\inetpub\wwwroot
    或类似目录中。

  2. 相对路径及代码:与Linux环境类似,使用相对路径和

    Path.Combine
    构建文件路径。

  3. 检查权限: 确保 IIS AppPool 或应用程序用户具有文件位置的读取权限。

在这两种环境中,请确保记录所有文件路径和访问错误,以便于调试。始终在部署包中包含必要的文件,并考虑对可能在环境之间发生变化的路径使用环境变量。

© www.soinside.com 2019 - 2024. All rights reserved.