在 aws Elastic BeanStalk 服务器上使用 os.getcwd() 读取文件的问题

Posted

技术标签:

【中文标题】在 aws Elastic BeanStalk 服务器上使用 os.getcwd() 读取文件的问题【英文标题】:Issue with reading files from using os.getcwd() on aws ElasticBean Stalk server 【发布时间】:2021-10-01 10:23:08 【问题描述】:

我的 Flask/Dash 应用程序读取文件 /data 目录。当我在本地运行应用程序时,我使用os.getcwd() 来读取 csv 文件。

df = pd.read_csv(os.getcwd() + "/data/file1.csv")

但是,在将应用程序部署到 AWS EB 实例/服务器时,我遇到了以下错误。

File "/var/app/current/base_rent_calc.py", line 38, in <module>

Jul 24 04:53:43 ip-172-31-20-89 web: df = pd.read_csv(os.getcwd() + "/data/file1.csv")

Jul 24 04:53:43 ip-172-31-20-89 web: FileNotFoundError: [Errno 2] No such file or directory

如何设置正确的文件路径/目录?或者我如何检查 AWS ElasticBean 上的 os.getcwd() 是什么。

【问题讨论】:

您假设data/ 在您当前的工作目录中。看看你的应用是如何在 EB 中启动的——它是否指定了一个目录? 【参考方案1】:

我认为您需要连接到 Elastic Beanstalk 实例,找到“file1.csv”文件的文件路径,并为此使用绝对路径。

有关于如何连接到运行您的 EB 实例 here 的 EC2 实例的文档。一旦你有了一个 ssh 会话,你就需要四处寻找文件。根据您的回答,我会这样做

cd /var/app/current
ls -lha

这将显示我猜你的应用正在运行的目录中的所有文件。

一旦你也进入了那个目录,你就可以得到一个 python shell 并通过输入 python 来查看 os.getcwd() 的作用。

【讨论】:

所有应用程序文件都在/var/app/current 中,包括包含我要阅读的文件的数据文件夹。当我运行 os.getcwd() 时,路径是 `/var/app/current'。 如果你输入 head -n 10 /var/app/current/data/file1.csv 会发生什么?如果这为您提供了所需文件的输出,那么我会将 os.getcwd() + "/data/file1.csv" 替换为 "/var/app/current/data/file1.csv"。 运行head -n 10 /var/app/current/data/file1.csv 打开文件/给出我正在寻找的输出。好的,我可以替换os.getcwd(),但是,不明白为什么它不起作用。 用文件的绝对路径替换它会修复代码吗?【参考方案2】:

检查 AWS ElasticBean 上的 os.getcwd() 是什么。

当您部署应用程序时,这将是 /var/app/staging;当应用程序已部署时,这将是 /var/app/current

【讨论】:

@kms 这就是我写的。所以不确定你的评论是什么意思?

以上是关于在 aws Elastic BeanStalk 服务器上使用 os.getcwd() 读取文件的问题的主要内容,如果未能解决你的问题,请参考以下文章

Amazon Elastic BeanStalk 错误:无法创建 AWS Elastic Beanstalk 应用程序版本

[AWS] Elastic Beanstalk

如何在 aws elastic beanstalk 环境实例启动上运行 shell 脚本

无法在 AWS Elastic Beanstalk 中创建环境?

在 Elastic Beanstalk(AWS) 中守护 Celerybeat

在 AWS Elastic Beanstalk 中存储外部 API 密钥