有没有一种在Ruby或Rails中将文件写入S3的方法?

3

我是一个使用Sidekiq的用户,我的用例需要很重的日志记录和文件写入。我有一些旧的工作程序直接写入文件系统。这不好,因为这使我无法按需启动几个小型实用程序实例。有人建议我改为将文件写入S3。

其中一些文件相当大,在某些报告的情况下达到数百万行。是否有办法缓冲对S3上的文件的输出?


1个回答

4

根据所述描述,您需要以下宝石来上传资源到S3

gem 'aws-sdk'

下面的类展示了初始化、存储和获取存储资源的公共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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接