gpt4 book ai didi

ruby-on-rails - 在rails中下载动态生成的大文件

转载 作者:行者123 更新时间:2023-12-04 01:51:16 25 4
gpt4 key购买 nike

我有一个包含很多行的大数据库,用户正在对数据库生成查询,然后想要导出信息(目前正在执行 CSV)。问题是,随着我们的数据库不断增长,查询花费的时间太长以至于下载尝试超时。

如何设置 Rails 以在文件创建时随时间下载文件?这些请求并不常见,所以我不介意对服务器造成严重打击,但它们确实需要是动态的(我无法提前生成文件)。

我找到了很多关于如何在 Rails 中下载文件的网站,但它们要么处理已经创建的文件,要么处理不需要时间创建的较小文件。这些文件可能非常大(20MB+),因此他们需要“流式传输”下载,但我找不到某种方法来做到这一点。

最佳答案

我建议使用后台工作服务,例如延迟工作或用于 rails 的 sidekiq,

告诉您的用户他们的报告将很快准备好并将其安排到后台工作服务,在报告生成作业结束时向用户发起通知(websockets、电子邮件等),然后允许用户下载来自您使用的任何存储的结果文件 - 本地、S3 等

与流式处理大型响应相比,这具有以下优势:

  • 来自会计的 1 位用户想要制作他的 20 份大型报告的季度报告包,不会因为工作人员疲惫而卡住您的网络主机的所有流量,因此您的 CEO 仍然可以登录查看他的数字
  • 您可以减少后台服务的工作人员数量,因此当来自第 1 点的所述用户访问您时,大型复杂查询不会淹没您的数据库
  • 文件的服务将由您的服务或 S3 前面的 Web 服务器完成,而不是工作进程(rails 可能很慢)
  • 关于ruby-on-rails - 在rails中下载动态生成的大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34729473/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com