在 Heroku 中运行的 Rails 应用程序的脉冲或 cron 作业

Posted

技术标签:

【中文标题】在 Heroku 中运行的 Rails 应用程序的脉冲或 cron 作业【英文标题】:A pulse or cron job for Rails app running in Heroku 【发布时间】:2012-11-12 06:48:54 【问题描述】:

我需要每天执行一次代码。一天可以不止一次,错过一天并不是世界末日。该代码将确保用户根据某些标准获得一些奖励积分。我会跟踪他们是否已经收到了奖励积分,这样就不会翻倍了..

一些简单的 cron 作业偶尔调用一个特定的控制器是完美的:

curl http://localhost/tasks/pulse

当然,真正的 crontab 条目效果很好。还是在 Rails 中有这种事情的内部机制?我正在使用最新的稳定 Rails(当前为 3.2.9)。

唯一的问题是这也需要在 Heroku 中工作。

我刚刚注意到Heroku's Scheduler。看起来很适合 Heroku。我可以在我的开发/测试环境中手动运行这些任务。这是在 Rails 中处理脉冲/cron 作业的最佳方式吗?有 rake 任务?易于在测试中合并运行 rake 任务?

【问题讨论】:

【参考方案1】:

您可以查看这个名为 whenever 的 gem,它是一个 Ruby gem,为编写和部署 cron 作业提供了清晰的语法。它维护得很好,我自己没有在 Heroku 上使用过,但值得一看。

你可以做很多事情,比如

every 3.hours do
  runner "MyModel.some_process"
  rake "my:rake:task"
  command "/usr/bin/my_great_command"
end

【讨论】:

看起来很棒,而且都在轨道上?没有外部的东西需要运行,只要它的脉搏?它会在heroku中工作吗? 实际上在这里进一步研究了它 (***.com/questions/8619754/…) 看起来它不适合在 heroku 上使用,因为只要 gem 只是编写 cron 作业和部署它们的一种很好的 ruby​​ 方式,crontab 会不要坚持heroku。抱歉,但我想我最初的回答并没有太大帮助,如果您将来不使用 heroku,这是一个很好的解决方案。 如何使用godrb.com 创建一个不断运行的工作人员,并且每天只在循环中发出一次http 请求,这样可以工作。【参考方案2】:

Heroku Scheduler 效果很好,而且易于设置!

【讨论】:

以上是关于在 Heroku 中运行的 Rails 应用程序的脉冲或 cron 作业的主要内容,如果未能解决你的问题,请参考以下文章

如何在heroku上重新启动rails应用程序

Heroku / Rails:PG :: Undefined Table:错误“[tablename]”在heroku rails迁移上不存在

在 Ruby on Rails 中使用 Heroku

在 Heroku 中运行任务的 Rails 2.3 样式插件和弃用警告

如何将 Rails + Webpacker 应用程序部署到 Heroku?

如何从 Heroku 中托管的 Rails API 应用程序在浏览器中设置 cookie,该应用程序在 Netlify 中托管的 React 应用程序中运行前端?