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

时间:2016-09-03 10:40:38

标签: ruby-on-rails heroku delayed-job

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

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

2 个答案:

答案 0 :(得分:1)

Heroku的文件系统是短暂的,即它们上的内容不会持续存在,并且它们不会在dynos中共享。

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

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

答案 1 :(得分:1)

您无法在dyno的文件系统中存储文件,并从另一个dyno中读取它们。

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