ruby-on-rails - 将文件传递给事件作业/后台作业

标签 ruby-on-rails redis background-process sidekiq resque

我通过标准文件输入接收请求参数中的文件

def create
  file = params[:file]
  upload = Upload.create(file: file, filename: "img.png")
end

但是,对于大型上传,我想在后台作业中执行此操作。 Sidekiq 或 Resque 等流行的后台作业选项依赖于 Redis 来存储参数,因此我不能只通过 Redis 传递文件对象。

我可以使用 Tempfile,但在某些平台(例如 Heroku)上,本地存储并不可靠。

我有什么选择可以让它在“任何”平台上可靠?

最佳答案

我建议直接上传到类似 Amazon S3 的服务然后在后台作业中按照您认为合适的方式处理文件。

当用户上传文件时,您可以放心,它会安全地存储在 S3 中。您可以使用私有(private)存储桶来禁止公共(public)访问。然后,在您的后台任务中,您可以通过传递文件的 S3 URI 来处理上传,并让您的后台工作人员下载文件。

我不知道您的后台工作人员对该文件做了什么,但不用说,可能没有必要再次下载它。毕竟它存储在某个地方。

我用过 carrierwave-direct gem 在过去与成功。既然你提到了 Heroku,他们有一个详细的 guide用于将文件直接上传到 S3。

关于ruby-on-rails - 将文件传递给事件作业/后台作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46705045/

相关文章:

ruby-on-rails - 如果关系记录不存在,为什么我的 activerecord 查询不返回任何内容?

ruby-on-rails - Rails、ActionController::Live、Puma:ThreadError

c# - 在 Azure VM 中使用 Booksleeve Redis 客户端时出现 Redis 连接错误

c - 如何检查后台运算符(operator) '&' 的命令?

ruby-on-rails - Rails 无缘无故地更改了 schema.rb

ruby-on-rails - 在 Ruby/Rails gem 中需要 Node.js 依赖项

ruby-on-rails - 参数错误 : odd number of arguments for Hash when trying to connect to redis

c# - Redis快速插入5000万条记录的方法

linux - 如何确定脚本是否作为 nohup 完成运行?

bash - Bash:在后台进行多个npm安装会出现错误 'No space left on device'