代码之家  ›  专栏  ›  技术社区  ›  RubyRedGrapefruit

有没有办法用Ruby或Rails将文件写到S3?

  •  0
  • RubyRedGrapefruit  · 技术社区  · 6 年前

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

    其中一些文件相当大,在某些报告中多达数百万行。有没有办法将输出缓冲到S3上的文件?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Rohan    6 年前

    根据共享的描述,您将需要下面提到的gem来将资源上传到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