ruby-on-rails - 我如何在 Rails(Web Scraping)中写出永无止境的工作?
问题描述
目标:我想在 Rails 应用程序中制作一个可以无限期运行并且可以扩展的网络爬虫。
当前堆栈应用程序正在运行: ROR/Heroku/Redis/Postgres
想法:我正在考虑运行每n分钟运行一次的Sidekiq作业, 并检查是否有任何代理可用于抓取(这些代理将存储在状态为休眠/抓取的表中)。
假设有一个可用于抓取的代理,它将检查(使用Sidekiq API)是否有任何可用的工作人员来启动另一个作业以使用可用的代理进行抓取。
这意味着我可以通过增加工人数量和可用代理的数量来扩展刮板。如果由于任何原因作业失败,则寻找可用代理的作业将再次启动它。
问题:这是实现我目标的最佳解决方案吗?利用长期运行的 Sidekiq 作业是最好的主意还是会失败?
解决方案
Sidekiq 旨在运行对您的组织来说是“工作单元”的单个作业。
您可以构建自己的循环,并在该循环内为要抓取的每个页面创建作业,但循环本身不应该是作业。
推荐阅读
- python - 如何在python的数据框中查找具有相同值的列列表
- node.js - 为什么我收到 Aurelia 和 Gulp 的打字稿编译错误?
- estimation - 估计平均参数
- git - git compare 没有显示任何差异
- php - 使用动态类
- java - 程序仅以特定值进入无限循环
- android - 如何在Android应用程序中多次单击按钮并更改模式
- javascript - 在javascript中将变量插入文件路径字符串
- google-apps-script - 如何根据星期几突出显示 Google 表格标签
- kubernetes-helm - Helm - 覆盖 values.yaml 中的特定值