我如何 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。
我发现我应该应用以下方法:
现在我正在我的项目中使用 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 Service。 data_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'
我有一个 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。
我发现我应该应用以下方法:
现在我正在我的项目中使用 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 Service。 data_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'