我怎样才能在 Rails(Web Scraping)中写一个永无止境的工作?

How can i write a never ending job in Rails (Web Scraping)?

目标:我想在 Rails 应用程序中制作一个可以无限期运行并且可以扩展的网络抓取工具。

当前堆栈应用 运行 于: ROR/Heroku/Redis/Postgres

想法: 我正在考虑 运行 一个 Sidekiq 作业,每 n 分钟运行一次,并检查是否有任何代理可用于抓取(这些将存储在 [= =38=] 状态为 sleeping/scraping).

假设有一个代理可用于抓取它然后将检查(使用 Sidekiq API)是否有可用的工作人员启动另一个工作以使用可用的代理抓取。

这意味着我可以通过增加工作人员数量和可用代理数量来扩展爬虫。如果由于任何原因作业失败,寻找可用代理的作业将再次启动它。

问题:这是实现我的目标的最佳解决方案吗?使用长 运行 Sidekiq 作业是最好的主意还是会失败?

如果您希望作业每 n 分钟 运行,您可以安排它。

并且由于您使用的是 Heroku,因此有一个附加组件:https://devcenter.heroku.com/articles/scheduler

另一种解决方案是设置 cron 作业并使用 whenever gem.

安排它们

Sidekiq 旨在 运行 对您的组织来说 "units of work" 的个人工作。

您可以构建自己的循环,并在该循环内为要抓取的每个页面创建作业,但循环本身不应是作业。