Heroku的神秘短暂文件系统不让我从S3获取文件

所以,我几天来一直在努力解决这个问题… 我需要从S3获取一个文件并将其写入Heroku上我的Rails应用程序中的目录。 我必须对Heroku上的短暂文件系统有误解,因为我无法弄清楚它为什么不起作用。

我正在运行s3.bucket('bucket').object('file.csv').get(response_target: 'file.csv')从S3获取文件并将其写入我的应用程序。 最初我只是编写了一个.rb来执行此操作并使用Heroku Scheduler运行它,但无济于事。 然后我将脚本转换为rake任务并再次在scheduler上运行,但无济于事。 我可以在我的开发环境中完美地运行.rb脚本和rake任务。

在阅读了这篇以及关于短暂文件系统如何工作的内容之后, 我认为该任务实际上正在工作,但是当我在heroku run bash使用ls时,文件被破坏(或实际上是在那里但我看不到它?) 。

有人可以解释一下我的情况吗? 如果我在Heroku上从S3写入我的应用程序获取文件的努力是徒劳的? 如果还有其他选择吗?

如果我在此之后无法理解,那么我将在EC2中设置我自己的环境。

使用Heroku,您没有运行单个应用程序,而是您有几个dynos,每个都有一个代码副本并运行应用程序的某些方面,并且每个都独立于其他应用程序。 特别是每个dyno的文件系统与其他文件系统是分开的。

在你的情况下,你推动你的应用程序,这会创建一个(或许更多)web dynos,它运行你的Rails应用程序 – 处理Web请求。

您还可以使用下载文件的Heroku Scheduler执行计划任务。 当这个运行时,会创建一个新的一次性dyno并将该文件下载到该dyno的文件系统中。 任务完成后,dyno和下载的文件将被丢弃。

当你运行heroku run bash你创建了另一个一次性dyno,显然该文件不在该dyno的文件系统中。

解决方案将取决于您正在尝试做什么,但一个建议是将文件中的数据放入您的数据库,其他dynos可以轻松访问它。