gpt4 book ai didi

ruby-on-rails - 在下载大型 CSV 文件作为后台进程时排队请求(延迟作业)

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

这在我的 Controller 中工作正常。

def export_list_sites_as_csv
require "csv"
csv_string = CSV.generate do |csv|
csv << ["id","name", 'etc']
@search.relation.not_archived.each do |site|
csv << [site.id, site.name, site.etc]
end
end
send_data csv_string,
:type => 'text/csv',
:filename => '_sites.csv',
:disposition => 'attachment'

end
@search变量取决于用户过滤器,在范围内将放置 RAM 上的大量负载 ,用户体验不好。因为其他请求将被搁置,直到当前请求得到服务。这也使我的系统挂起。因此,希望在后台进程中运行,并在准备好下载后让用户知道。

当我尝试转向模型时。

I get an error undefined method `send_data' for #<\Class:0x9f8bed0>



我正在转向模型,因为我必须调用延迟工作。

第一次处理 CSV 和延迟作业。

编辑: ActionController::Streaming仅在 Controller 中可用,所以其他方式?更频繁与否,这不会去任何地方。

D面回答说,我将不得不寻找其他方式。

编辑 2:关注 http://railscasts.com/episodes/171-delayed-job我能够做到
class ExportCsv < Struct(:site_ids, :user_id)

def perform
require "csv"
sites = Site.where(id: site_ids)
CSV.open("tmp/#{user_id}.csv", "w+") do |csv|
csv << ["id","name", 'etc']
sites.each do |site|
csv << ....
end
end
end


def after(job)
send_file(
....
)
end

end

使用方法 ActionController::Streaming在自定义类中 ExportCsv , 或 Model
编辑:

了解同步以及我如何处理这种情况,

答案 : http://imnithin.github.io/csv_download_with_delayed_job.html

最佳答案

您尝试做的事情违背了 DelayedJob 的目的。

当用户发出请求时,服务器应该做出响应以完成它。问题是,有些请求需要花费相当多的时间才能完成,用户必须等待它完成。一个经典案例 - 大量电子邮件交付,但正如您所提到的,还有其他案例,例如数据套件生成。任何。完成所需的时间比您可以让用户等待的时间更长。

现在来了 DelayedJob。它在没有查询上下文的情况下执行某个 Action 来响应。它不需要着急。但你不能只是一巴掌send_data为它:不会有任何查询要求它回复 .相反,它应该将完成的工作的结果写入一些持久存储。

你有很多方法可以解决这个问题。

  • 当数据集准备好时,您可以通过电子邮件通知您的用户。您甚至可以将其附加到电子邮件中,但我不建议这样做:您不能依赖电子邮件提供商准备好接受大量数据。制作一个下载数据集的链接并发送它。
  • DelayedJob 需要渲染数据集,将其保存到文件中,获取链接并通过电子邮件将其发送给用户。
  • 为您的应用创建一个听起来像“已完成的请求”的部分(模型、 Controller 和 View 的公司),这可能是用户个人资料的一部分。 “启动”请求应指示用户稍后返回并查看该列表以获取结果。
  • 请求完成后,DelayedJob 必须在该列表中创建一个条目。数据集的存储方式无关紧要,但您可以将其与上述方法结合,将其保存到文件中并显示指向它的链接。
  • 关于ruby-on-rails - 在下载大型 CSV 文件作为后台进程时排队请求(延迟作业),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27076999/

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