如何在 Heroku 实例 (Rails 4) 上 运行 进行循环处理?

How can I run a loop process on a Heroku instance (Rails 4)?

我有一个 Heroku Rails 4 应用程序,我想在其中持续 运行 一些东西。它正在处理来自 Amazon SQS 的数据。

现在,我使用 clock.rb 不断地向 运行 工人添加延迟工作。 worker 设置为 运行 10m,然后结束。由于 clock.rb 每 30 秒 运行ning 一次,它应该很快重新启动一个新进程。

我的 Procfile 是:

myworker: QUEUE=myworker bundle exec rake jobs:work

我想知道是否有办法更改 Procfile,这样我就可以说 "Every instance of myworker should run this process while it is alive. If it dies for whatever reason, restart it immediately and start processing again"

使用 Rails 4 和 Heroku 有什么好的方法吗?

一定有...我真的不知道这叫什么,但肯定有一个名字。

还有,等我有了运行ning,有没有好的说法"close the process every 10m, and restart, just to clear your memory/restart fresh"?

您不必使用延迟作业或类似的东西来做;你只需要创建一个自定义 Rake 任务。

例如,在我的工作中,我们的 Procfile 中有这一行:

jobs_worker: bundle exec rake poll_jobs

我们在 lib/tasks 中添加了一个 file_jobs.rake 文件,它执行以下操作:

task poll_jobs: :environment do while true puts "polling jobs" FileJob.poll_status! sleep 10 end end

我们加入了额外的睡眠时间 10,这样替换任务就不会立即启动。但是你可以把它拿出来。您的任务完成后,它将自动重新启动。请记住,如果您经常重新启动,Heroku 可能会生您的气而不会再次启动您的任务。

您可以很容易地在其中放置一个计时器,或者一个 'number of times you make it around the loop' - 并在计时器到期时退出,或者您经过循环的次数大于 'x'.

这有意义吗?