【问题标题】:Is there a way to write a file to S3 in Ruby or Rails?有没有办法在 Ruby 或 Rails 中将文件写入 S3?
【发布时间】:2018-06-15 20:24:12
【问题描述】:

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

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

【问题讨论】:

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-04
    • 1970-01-01
    • 1970-01-01
    • 2012-11-07
    • 1970-01-01
    • 2020-09-19
    • 1970-01-01
    相关资源
    最近更新 更多