如何在Heroku上终止Resque工作者?

4
我将使用这份指南来配置与Redis一起使用的Resque: http://blog.redistogo.com/2010/07/26/resque-with-redis-to-go/ 我已经全部设置完毕,当我将某些内容输入时,它会显示在我的Resque队列中。由于它是在Heroku上运行的,因此我运行以下命令:
heroku rake resque:work QUEUE=*
(in /app)
Starting the New Relic Agent.
Installed New Relic Browser Monitoring middleware
Connected to NewRelic Service at collector-1.newrelic.com:80
^C
[canceled]

任务完成后,工作进程仍然存在。如何删除/结束工作进程?

我目前有这个0 of 4 Workers Working,我想在队列中的任务完成后让工作进程自动删除。我该怎么做,还是需要调用另一个Heroku终端命令?

此外,Heroku上的Resque工作进程会产生任何费用吗?我只想手动触发我的Resque队列中的任务,不需要自动执行。

4个回答

9

我知道这是一个老问题,但你可以从控制台上完成:

$ heroku run console
irb(main):001:0> Resque.working[0].id
=> "09ec127d-bb90-4629-a6f2-bb2610885ab5:62:*"
irb(main):002:0> Resque.working.length
=> 28
irb(main):003:0> Resque.remove_worker("09ec127d-bb90-4629-a6f2-bb2610885ab5:62:*")
=> 0
irb(main):004:0> Resque.working.length
=> 27
irb(main):005:0> 

我还没有尝试过,但是也有一个手动执行此操作的gem。听起来你想自动化这个过程。

1
现在是 heroku run console - shem

3
为了与Heroku工作进程集成,您需要实现一个名为jobs:work的rake任务。要将其与resque配合使用,您需要将以下任务添加到rake文件中(取自http://blog.redistogo.com/2010/07/26/resque-with-redis-to-go/):
require 'resque/tasks'

task "resque:setup" => :environment do
  ENV['QUEUE'] = '*'
end

desc "Alias for resque:work (To run workers on Heroku)"
task "jobs:work" => "resque:work"

要在Heroku上启动单个worker,请使用以下命令:

? heroku workers 1

为了关闭后台工作进程,请执行以下操作:
? heroku workers 0

使用5个工作进程,请执行以下操作:

? heroku workers 5

Heroku会按秒计费你运行的每个工作者(worker)。如果你登录Heroku,你可以在应用程序资源页面上看到你目前的工作者数量将花费多少。


1
在Heroku Cedar Stack上,这很容易实现。要更改工作进程数为n,您只需运行此命令即可。它会杀死/创建工作进程以达到n的目标。
heroku ps:scale worker=n --app your-app-name

查看Heroku上的这篇文章以获取更多细节:https://devcenter.heroku.com/articles/scaling


不幸的是,他所说的是resque工作进程在运行完任务后处于空闲状态,而不是heroku dynos。 - AJP
实际上,我的回答是针对Resque工作者而不是Heroku Dynos的。要更改Dynos,命令将是heroku ps:scale web=n --app your-app-name - Paul Pettengill

0

你试过HireFire了吗?

它专门设计用于在Heroku上扩展/缩小Resque(和Delayed Job)工作进程。


不幸的是,我认为他所说的是resque工作进程在运行完任务后处于空闲状态,而不是heroku dynos。 - AJP

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接