从轨道4使用袋鼠流中读取一个CSV文件袋鼠、轨道、文件、CSV

2023-09-11 09:59:29 作者:ヽ简単简単

我对这个另外一个问题在这里打开从S3采用袋鼠在Heroku CSV文件,但我没有任何优势的话 - 这样一个改写:

I have another question on this here Open a CSV file from S3 using Roo on Heroku but I'm not getting any bites - so a reword:

我有一个S3桶CSV文件 我希望它用小豆在Heroku的基于应用程序(即没有本地文件访问)来读取 如何从一个流中打开CSV文件?

I have a CSV file in an S3 bucket I want to read it using Roo in a Heroku based app (i.e. no local file access) How do I open the CSV file from a stream?

或者有更好的工具,这样做呢?

Or is there a better tool for doing this?

我使用Rails 4,红宝石2。注意,我可以successfuly打开CSV阅读,如果我从形式发布。我怎样才能适应这从S3存储单元的文件?

I am using Rails 4, Ruby 2. Note I can successfuly open the CSV for reading if I post it from a form. How can I adapt this to snap the file from an S3 bucket?

推荐答案

简单的答案 - 。不要用小豆

Short answer - don't use Roo.

我结束了使用标准的CSV命令,以小CSV文件的工作,你可以使用这样的事情很简单的读取文件内容加载到内存:

I ended up using the standard CSV commands, working with small CSV files you can very simply read the file contents into memory using something like this:

body = file.read
CSV.parse(body, col_sep: ",", headers: true) do |row|
    row_hash = row.to_hash
    field = row_hash["FieldName"]

读取一种形式,通过的文件,只需引用PARAMS:

reading a file passed in from a form, just reference the params:

file = params[:file]
body = file.read

要读取的形式S3可以使用AWS宝石:

To read in form S3 you can use the AWS gem:

s3 = AWS::S3.new(access_key_id: ENV['AWS_ACCESS_KEY_ID'], secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'])
bucket = s3.buckets['BUCKET_NAME']
# check each object in the bucket
bucket.objects.each do |obj|
    import_file = obj.key
    body = obj.read
    # call the same style import code as above...
end