我如何 send/use/modify 数据,这是我的 rails 应用程序的 Sidekiq 后台工作人员的结果?

How can I send/use/modify data which is the result of a Sidekiq background worker of my rails app?

我有一个 ruby on rails Web 应用程序部署在 Heroku 上。

此网络应用程序将给定 URL 的一些工作供稿提取为 XMLs。然后调节这些 XML 并创建一个 XML 文件。有一段时间效果很好。但是,由于 URL 和招聘广告的#of 增加,它根本不起作用。这个过程有时需要 45 秒,因为有超过 35K 个职位空缺(Heroku 在 30 秒后发送超时)。我有 H12 timeout error. This error led me to read this worker dynos and background processing

我发现我应该应用以下方法:

Scalable-approach Heroku

现在我正在我的项目中使用 Redis 和 Sidekiq。而且我能够创建一个后台工作者来完成所有肮脏的工作。但这是我的问题。

而不是在控制器中执行此调用 class:

def apply

   send_data Aggregator.new(providers: providers).call,
             type: 'text/xml; charset=UTF-8;',
             disposition: 'attachment; filename=indeed_apply_yes.xml'
end

我正在做这个 perform_async 电话。

 def apply

    ReportWorker.perform_async(Time.now)
    redirect_to health_path   #and returns status 200 ok

  end

我实现了这个 class:ReportWorker 调用 Aggregator Servicedata_xml 是我需要在某处显示或准备就绪时自动下载的字段。

class ReportWorker

    include Sidekiq::Worker
    sidekiq_options retry: false 
    data_xml = nil

    def perform(start_date)

        url_one = 'https://www.examplea.com/abc/download-xml'
        url_two = 'https://www.exampleb.com/efg/download-xml'
        cursor = 'stop'
        providers = [url_one, url_two, cursor]    

        puts "SIDEKIQ WORKER GENERATING THE XML-DATA AT #{start_date}"
        data_xml = Aggregator.new(providers: providers).call
        puts "SIDEKIQ WORKER GENERATED THE XML-DATA AT #{Time.now}"     


    end 
end

我知道不建议让 send_data/file 方法可以从 Controller classes 访问。那么,关于如何操作有什么建议吗?

提前致谢!!

您可以在您的应用程序上设置一些数据库吗?然后在那里存储有关已完成作业的记录,您也可以将整个文件保存在数据库中,但我建议使用一些云存储(如 amazon s3)。 之后,您可以在某个页面上为用户显示排队作业的当前状态,在作业完成后使用按钮 'download'