2016-02-11 4 views
4

Я имею дело с потенциально огромными CSV-файлами, которые я хочу экспортировать из своего приложения Rails, и поскольку он работает на Heroku, моя идея состояла в том, чтобы передавать эти CSV-файлы непосредственно на S3 при их создании.Загрузить поток CSV из Ruby в S3

Теперь у меня есть вопрос, в том, что Aws::S3 ожидает файл для того, чтобы быть в состоянии выполнить загрузку, в то время как в моем приложении Rails Я хотел бы сделать что-то вроде:

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

Как я могу добиться этого?

+0

Вы посмотрели на S3 Multipart gem? 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, поскольку это может быть то, что вы ищете.

EDIT 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 должен создать строку данных CSV в Ruby. После создания этой строки CSV, мы помещаем в S3, используя ведро, с траекторией

#{FOLDER_NAME}/#{file_name}.csv 

В моем коде, я экспортировать все данные в ActionLog модели.

+0

Окружающий ответ с объяснением серьезно улучшил бы его. – zx485

+0

Спасибо! Я обновил свой ответ, но мой английский не очень хорош, извините :( –

+0

Я очень старался улучшить вашу грамматику и орфографию. Но я признаю, что мой подход может быть недостаточным. Я не мог вывести никакого смысла. – zx485

Смежные вопросы