繁体   English   中英

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

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

我有一个Heroku Rails 4应用程序,我想让它连续运行。 它正在处理来自Amazon SQS的数据。

现在,我使用clock.rb连续添加延迟的作业来运行工作程序。 工人准备奔跑10m,然后完成。 由于clock.rb每30秒运行一次,它应该很快重新启动一个新进程。

我的Procfile是:

myworker: QUEUE=myworker bundle exec rake jobs:work

我想知道是否有一种方法可以更改Procfile,以便我可以说“ myworker的每个实例都应在运行时运行此过程。如果它因某种原因而死,请立即重新启动并再次开始处理”

使用Rails 4和Heroku可以做到这一点吗?

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

另外,一旦我运行它,是否会有一个好方法说“每隔10m关闭该过程,然后重新启动,只是为了清除内存/重新开始”?

您不必使用“延迟工作”之类的方法进行处理; 您只需要创建一个自定义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可能会生您的气,而不会重新启动您的任务。

您可以轻松地在其中放置一个计时器,或者“在循环中放置它的次数”-在计时器到期时退出,或者您经过循环的次数大于“ x”,然后退出。

那有意义吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM