有没有办法在Ruby或Rails中将文件写入S3?

时间:2018-06-15 03:45:49

标签: ruby ruby-on-rails-3 amazon-s3 sidekiq

我是Sidekiq的用户,其用例需要非常繁重的日志记录和文件写入。我有一些老工人直接写入文件系统。这不好,因为它使我无法根据需要启动几个小实用程序实例。我建议我将文件写入S3。

这些文件中的一些非常大,在某些报告的情况下高达数百万行。有没有办法将输出缓冲到S3上的文件?

1 个答案:

答案 0 :(得分:1)

根据共享的描述,您需要以下提到的宝石才能将资源上传到S3

gem 'aws-sdk'

下面提到的类显示了初始化,存储和获取所存储资源的public_url的方法。

class S3Store
 TEST = "app-uploads".freeze

 def initialize file
  @file = file
  @s3 = AWS::S3.new
  @bucket = @s3.buckets[TEST]
 end

 def store
  @obj = @bucket.objects[filename].write(@file.tempfile, acl: :public_read)
  self
 end

 def url
  @obj.public_url.to_s
 end

 private

 def filename
  @filename ||= @file.original_filename.gsub(/[^a-zA-Z0-9_\.]/, '_')
 end
end

下面提到的代码显示了上面类的调用方法。

image = S3Store.new(File.read(path_to_file)).store