gpt4 book ai didi

ruby-on-rails - Rails 和 Heroku 上的定期后台作业

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

我正在开发一个 Rails 应用程序,它通过从第 3 方网站(类似于 http://railscasts.com/episodes/190-screen-scraping-with-nokogiri)抓取价格来提供各种产品的定价数据。

由于我是编程新手,现在我通过将我的代码放入 rake 任务来手动执行此操作。这些任务遍历我数据库中的所有产品,并通过抓取更新它们的价格。它需要几个小时才能完成(因为有 1000 种产品),但大部分时间都花在调用 sleep 上,所以我可以限制自己的速度。现在我正在从命令行手动调用 rake 任务,但我希望有一个每周定期在后台自动运行的作业。

经过一些研究,似乎有几种方法可以做到这一点(Resque、DelayedJob、Cron/Whenever),但我不确定哪种方法最适合我的需要。此外,我正在通过 Heroku 进行部署,所以我想确保我不会在 worker dynos 上浪费金钱;现在这只是一个副业,所以我不想花那么多钱。

执行此操作的简单且经济高效的方法是什么?

最佳答案

我目前正在使用 Heroku Scheduler .它可以每天、每小时或每 10 分钟运行一次任务。它非常易于使用:

  1. 使用 heroku addons:add scheduler:standard 安装附加组件
  2. 在 Heroku 网站上转到您的应用程序,选择 Scheduler 插件并添加一个新作业。您可以通过定义任务 (rake name_of_your_task)、频率和下一次运行来做到这一点。完成了。

但是,有几个问题:

  1. 您需要提供有效的信用卡才能使用此插件,即使它原则上是免费的。

  2. 调度程序运行一次性进程,这些进程将计入您的测功机小时数。

  3. Heroku 仅为每个应用提供 750 个免费测功小时。

这就是 Scheduler 的 wiki 对 Long-running jobs 的描述:

Scheduled jobs are meant to execute short running tasks or enqueue longer running tasks into a background job queue. Anything that takes longer than a couple of minutes to complete should use a worker dyno to run.

所以我的建议是:

  1. 将您的 rake 任务分解成更小的 block ,只运行几分钟。

  2. 更定期地运行这些任务(您甚至没有使用调度程序的每周选项)。

  3. 留意您的测功时间。你可以这样做here . 750 小时等于 31 天零 6 小时。因此,在这 31 天的月份中,您至少有 6 个小时可以工作。如果您的应用未被使用,您还可以使用以下命令将其关闭,以停止计算常规测功机小时数。

    heroku ps:scale web=0

    你可以用

    heroku ps:scale web=1

不幸的是,没有免费计算能力这样的东西。

关于ruby-on-rails - Rails 和 Heroku 上的定期后台作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13812642/

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