2016-02-11 52 views
4

我正在处理可能的巨大CSV文件,我想从我的Rails应用程序导出,因为它在Heroku上运行,所以我的想法是在生成CSV文件时直接将这些CSV文件传输到S3。将Ruby从Ruby上传到S3

现在,我有一个问题,在Aws::S3为了能够执行上传,而在我的Rails应用程序,我想这样做需要一个文件:

S3.bucket('my-bucket').object('my-csv') << %w(this is one line) 

我怎样才能做到这一点?

+0

你看过S3 Multipart宝石吗? https://github.com/maxgillett/s3_multipart我不认为直接文件保存到S3是可能的,直到他们没有生成。 – aliibrahim

+0

我正在构建CSV,在后台作业中,我不会通过某种界面上传它。 – linkyndy

+0

@AndreiHorak你找到解决方案吗? – Tonja

回答

0

我会看看http://docs.aws.amazon.com/AWSRubySDK/latest/AWS/S3/S3Object.html#write-instance_method,因为这可能是你要找的东西。

编辑 http://docs.aws.amazon.com/AmazonS3/latest/dev/UploadObjSingleOpRuby.html可能更加相关,因为第一个链接指向红宝石AWS-SDK V1

require 'aws-sdk' 

s3 = Aws::S3::Resource.new(region:'us-west-2') 
obj = s3.bucket('bucket-name').object('key') 

# string data 
obj.put(body: 'Hello World!') 

# IO object 
File.open('source', 'rb') do |file| 
    obj.put(body: file) 
end 
+2

这仍然是一个已经建好的文件。我想逐步上传文件的块。 – linkyndy

2
s3 = Aws::S3::Resource.new(region:'us-west-2') 
obj = s3.bucket.object("#{FOLDER_NAME}/#{file_name}.csv") 
file_csv = CSV.generate do |csv| 
    csv << ActionLog.column_names 
    ActionLog.all.each do |action_log| 
     csv << action_log.attributes.values 
    end 
    end 
    obj.put body: file_csv 

file_csv = CSV.generate是在Ruby中创建CSV数据的字符串。创建CSV的这个字符串后,我们把对S3使用桶,与路径

#{FOLDER_NAME}/#{file_name}.csv 

在我的代码,我导出所有的数据到ActionLog模型。

+0

用解释围绕你的答案会严重改善它。 – zx485

+0

谢谢!我已经更新了我的答案,但是我的英语不好,对不起:( –

+0

我很努力地提高你的语法和拼写,但我承认我的方法可能不够,我无法推断出所有的意思 – zx485