如何在 heroku 上临时存储文件以延迟作业导入

How to temporarily store files on heroku for delayed job import

我的 rails 应用程序中有导入功能,可以导入 CSV 文件并相应地更新记录。随着此文件变大,请求需要更长的时间并最终超时。因此我选择实现 delayed_job 来处理我的长 运行 请求。唯一的问题是,当作业运行时,会抛出错误消息 Errno::ENOENT: No such file or directory。这是因为我的解决方案适用于内存中的 CSV 文件。

有没有办法将 CSV 文件保存到我的 heroku 服务器(并在导入后删除它)?

Heroku 的文件系统是短暂的,即它们上的内容不会持久存在,它们不会在 dynos 之间共享。

如果您的延迟作业是 运行 在另一个 dyno 上(如果它已经不是,应该是这样),您将无法访问存在于您的 web dyno 磁盘上的 csv。

一种解决方法是创建一个服务于 CSV 的操作。然后,您可以在作业开始前使用一些 HTTP 库下载 CSV。

您不能将文件存储在 dyno 的文件系统上并从另一个 dyno 读回它们。

您可以将临时文件存储在 AWS S3 等外部云存储中,并从延迟的作业中读回。