解析存储在S3中的CSV文件的推荐方法是什么?

时间:2016-04-07 21:05:06

标签: ruby-on-rails ruby csv amazon-s3

我正在使用aws-sdk gem来读取存储在AWS S3中的CSV文件。

引用AWS doc。到目前为止,我有:

Aws::S3::Resource.new.bucket(ENV['AWS_BUCKET_NAME']).object(s3_key).get({ response_target: "#{Rails.root}/tmp/items.csv" })

在Pry,这会返回:

output error: #<IOError: closed stream>

但是,导航到tmp/。我可以看到items.csv文件,它包含正确的内容。我不确定返回值是否是实际错误。

我的第二个问题。可以在"#{Rails.root}/tmp/"中存储临时文件吗?

或者我应该考虑另一种方法?

我可以将文件加载到内存中,然后加载CSV.parse。如果CSV文件很大,这会有影响吗?

1 个答案:

答案 0 :(得分:1)

我不确定如何使用aws gem同步返回文件对象。

但我可以就你提到的其他话题提供一些建议。

首先,/ tmp - 我发现在这里保存文件是一种有效的方法。在AWS上,我使用此目录为S3存储的图像创建本地LRU缓存。关键是要抢占文件被自动删除的情况。如果发生这种情况,则需要重新获取该文件。顺便说一句,Heroku有一个只读文件系统&#39;但仍然允许你写入/ tmp。

第二部分是同步返回文件对象的问题。 虽然可以使用S3 gem来实现这一点,但我发现使用open-urimechanize之类的内容通过HTTP获取成功。如果它不应该是公开可用的资产,您可以更改S3上的权限以限制对服务器的访问。