我有一个网站,可以读取存储在一个文件夹中的文本文件。本地主机中一切正常。但是当我尝试在 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 中找到该文件?
当您将应用程序部署到AWS Elastic Beanstalk时,环境和文件系统结构与您本地的开发环境不同。以下是解决此问题的方法:
使用相对路径:
Environment.CurrentDirectory
。调整AWS环境的路径:
C:\inetpub\AspNetCoreWebApps\MainApp\...
) 是 Windows 特定的路径,并且您的 Elastic Beanstalk 环境中可能不存在。 AWS Elastic Beanstalk 默认使用 Linux 服务器,但也可以使用 Windows 服务器。/var/app/current/
的目录下。使用您的应用程序部署文件:
在代码中访问文件:
您可以将文件访问代码修改为与环境更加无关的代码。例如,您可以将该文件放置在与应用程序可执行文件相关的目录中,并按如下方式访问它:
var basePath = AppDomain.CurrentDomain.BaseDirectory;
var filePath = Path.Combine(basePath, "Design Tools/Resources/Steel Sections/AISCDatabaseV15.txt");
这将根据应用程序运行的目录构建路径。
对于 Elastic Beanstalk Windows 环境:
Windows 目录: 了解文件通常位于
C:\inetpub\wwwroot
或类似目录中。
相对路径及代码:与Linux环境类似,使用相对路径和
Path.Combine
构建文件路径。
检查权限: 确保 IIS AppPool 或应用程序用户具有文件位置的读取权限。
在这两种环境中,请确保记录所有文件路径和访问错误,以便于调试。始终在部署包中包含必要的文件,并考虑对可能在环境之间发生变化的路径使用环境变量。