【问题标题】:What is the best way to run a long task on Heroku with Ruby On Rails?使用 Ruby On Rails 在 Heroku 上运行长任务的最佳方式是什么?
【发布时间】:2018-07-12 18:33:47
【问题描述】:

我正在寻找在 Heroku 中运行非常长的任务的最佳方法。

我将 Ruby On Rails 用于我的 Web 应用程序,我有一个很长的任务,我想在每周日的晚上运行它。大约需要15~20分钟。我已经有Rufus-Scheduler,但我不确定它是否是最有效的解决方案。

我还通过Delayed Job 找到了一些关于Backgrounding Tasks in Heroku 的信息。但这是最好的处理方式吗?

谢谢。

【问题讨论】:

  • 后台最适合由您网站的用户触发的任务,即您的 Rails 应用程序需要启动一些与请求-响应周期异步完成的工作的情况。这比仅仅运行一个独立于您的网络应用程序的每周任务(例如使用 Cron 或 Rufus-scheduler)要复杂得多。您对 Rufus-scheduler 有什么保留意见?从表面上看,这似乎是一个不错的方法。
  • 感谢您的回答和对什么是背景的解释。在用户(理论上)不使用该应用程序的期间,我使用 Rufus-scheduler 更新一些大数据。但只要15-20分钟就可以了。那么,如果我在基于 Heroku 的生产环境中使用 Rufus-Scheduler 来完成如此大的任务,会不会有问题? (目前免费版)
  • 我认为这不是问题。如果您担心它会使用过多的系统资源,请尝试通过分批执行任务来减慢它的速度,并在每批之间进行睡眠或其他操作。

标签: ruby-on-rails ruby heroku background-process


【解决方案1】:

这是我每天晚上运行的工作所使用的:https://devcenter.heroku.com/articles/scheduler

如果您的作业被配置为 rake 任务,它会非常有效。链接中的指南向您展示了如何配置所有内容,甚至解决长期运行的作业。

【讨论】:

  • 您绝对应该按照@NickM 的建议将其作为 Rake 任务进行。从调度程序到 Rails 的钩子需要尽可能简单,而 Rake 是一个很好的解决方案。它还可以让您轻松测试它。
  • 非常感谢您的解决方案,我会实施的。
【解决方案2】:

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

Heroku says,

计划作业旨在执行短期运行的任务或将较长运行的任务排入后台作业队列。任何需要超过几分钟才能完成的事情都应该使用工人测功机来运行。

因此,在我看来,最好的方法是使用 Heroku Scheduler 为每种作业(短或长)运行 rake 任务,但如果一个任务花费的时间超过几分钟,那么我只需创建一个背景该 rake 任务中的工作。这样调度程序的运行时间永远不会超过几分钟。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-28
    相关资源
    最近更新 更多