如何在Heroku上用Ruby On Rails运行长时间任务的最佳方法是什么?

7
我正在寻找在Heroku中运行非常长的任务的最佳方法。
我使用Ruby On Rails开发我的Web应用程序,并且我有一个非常长的任务,我希望每周日晚上运行它。这需要大约15-20分钟的时间。我已经使用了 Rufus-Scheduler,但我不确定它是否是最有效的解决方案。
我还发现了一些关于 Heroku中的后台任务 Delayed Job的内容。但这是处理它的最佳方式吗?
谢谢。

后台处理最适合由您网站的用户触发的任务,即您的Rails应用程序需要启动一些异步完成的作业的情况,这比仅独立于Web应用程序运行每周任务(例如使用Cron或Rufus-scheduler)要复杂得多。您对Rufus-scheduler有什么保留意见?表面上看起来这似乎是一个不错的方法。 - Max Williams
感谢您的回答和对后台处理的解释。 我使用Rufus-scheduler在用户(理论上)不使用应用程序的时间段内更新一些大数据。但是,这个过程最长也只有15-20分钟。 那么,在基于Heroku的生产环境中使用Rufus-Scheduler处理如此大的任务是否会成为问题?(目前是免费版本) - Kilian
我认为这不是问题。如果你担心它会使用太多系统资源,那么可以尝试通过分批处理任务并在每个批次之间加入延时等方式来减缓速度。 - Max Williams
2个回答

5
这是我每晚运行的工作所使用的东西:https://devcenter.heroku.com/articles/scheduler
如果您的工作被配置为rake任务,则可以很好地解决问题。链接中的指南向您展示如何配置所有内容,甚至还提到了长时间运行的工作。

2
你应该像@NickM建议的那样将其作为Rake任务来完成。从调度程序到Rails的钩子需要尽可能简单,而Rake是一个很好的解决方案。此外,它还允许您轻松测试它。 - Max Williams
非常感谢您的解决方案,我会实施它。 - Kilian

0

Heroku 不建议使用 Heroku Scheduler 运行长时间的作业。

Heroku 表示,

计划任务旨在执行短期运行的任务或将需要更长时间才能完成的任务排入后台作业队列。任何需要超过几分钟才能完成的任务都应该使用工作进程来运行。

因此,在我看来,最好的方法是使用 Heroku Scheduler 运行 rake 任务来处理各种类型的作业(短期或长期),但如果一个任务需要超过几分钟的时间,则可以在该 rake 任务中创建后台作业。这样调度程序就永远不会运行超过几分钟。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接