Ruby on rails 定期清理Heroku上过时的Resque工作人员?

Ruby on rails 定期清理Heroku上过时的Resque工作人员?,ruby-on-rails,heroku,background-process,resque,Ruby On Rails,Heroku,Background Process,Resque,我有一些工作人员,通常运行时间不应超过1-5分钟,但这些工作人员经常会“卡住”并无所事事,堵塞工作人员,无所事事 所以我想定期检查运行时间超过X时间的工人,并清除他们。但我需要自动执行此操作,因此我不必亲自进去每隔几个小时手动清除它们(Resque.workers.each{w|w.unregister_worker}) 这需要在Heroku上运行。将其放入rake任务中: allocated_time = 60 * 60 # 1 hour Resque::WorkerRegistry.work

我有一些工作人员,通常运行时间不应超过1-5分钟,但这些工作人员经常会“卡住”并无所事事,堵塞工作人员,无所事事

所以我想定期检查运行时间超过X时间的工人,并清除他们。但我需要自动执行此操作,因此我不必亲自进去每隔几个小时手动清除它们(
Resque.workers.each{w|w.unregister_worker}


这需要在Heroku上运行。

将其放入rake任务中:

allocated_time = 60 * 60 # 1 hour
Resque::WorkerRegistry.working.each do |worker|
  if (worker.started <=> Time.now - allocated_time) < 1
    worker.unregister
  end
end
allocated_time=60*60#1小时
Resque::WorkerRegistry.working.each do | worker|
如果(worker.started Time.now-分配的时间)<1
worker.unregister
结束
结束
使用heroku调度程序,您可以将其设置为至少10分钟(如果需要)。

对于Resque v1

# lib/tasks/clear_stale_workers.rake
namespace :clear do
  desc 'Clearing stuck workers ...'
  task :stale_workers => :environment do
    Resque.workers.each do |w|
      w.unregister_worker unless w.started > 1.hour.ago
    end
  end
end
在命令行中,
rake clear:stale_workers


在Heroku上,设置set the scheduler以运行此Rake任务。

这对我来说很有效,可以删除运行过时作业的特定工作线程。您可以将其添加到rake任务中

Resque::Worker.working.each{|w| w.done_working }

这似乎只是重新定义了2,现在人们在生产中使用它吗?自述文件给我的印象是,您还不应该使用它。似乎worker.started会告诉您worker最初注册的时间,而不是它在当前工作中工作了多长时间。因此,这不是判断员工是否陷入困境的正确测试。有关检索当前作业的开始时间的方法,请参阅。自工作人员启动以来的时间量是否是其卡住的可靠指示器?我假设1-5分钟是一项工作的持续时间。但如果工作机会不断到来,工人就可以永远跑下去而不会被“卡住”,是吗?我问是因为我也有同样的问题,我想要一个可靠的方法来清除堵塞。