我正在處理可能的巨大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