我正在处理可能的巨大CSV文件,我想从我的Rails应用程序导出,因为它在Heroku上运行,所以我的想法是在生成CSV文件时直接将这些CSV文件传输到S3。将Ruby从Ruby上传到S3
现在,我有一个问题,在Aws::S3
为了能够执行上传,而在我的Rails应用程序,我想这样做需要一个文件:
S3.bucket('my-bucket').object('my-csv') << %w(this is one line)
我怎样才能做到这一点?
我正在处理可能的巨大CSV文件,我想从我的Rails应用程序导出,因为它在Heroku上运行,所以我的想法是在生成CSV文件时直接将这些CSV文件传输到S3。将Ruby从Ruby上传到S3
现在,我有一个问题,在Aws::S3
为了能够执行上传,而在我的Rails应用程序,我想这样做需要一个文件:
S3.bucket('my-bucket').object('my-csv') << %w(this is one line)
我怎样才能做到这一点?
我会看看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
这仍然是一个已经建好的文件。我想逐步上传文件的块。 – linkyndy
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
模型。
你看过S3 Multipart宝石吗? https://github.com/maxgillett/s3_multipart我不认为直接文件保存到S3是可能的,直到他们没有生成。 – aliibrahim
我正在构建CSV,在后台作业中,我不会通过某种界面上传它。 – linkyndy
@AndreiHorak你找到解决方案吗? – Tonja