如何在Rails服务器启动时运行“rake resque:work QUEUE = *”?

9

我已经正确安装了resque,但是要处理所有队列,我需要运行

rake resque:work QUEUE='*'

问题在于我需要保持终端窗口打开,否则 resque:work 将无法运行。
你知道有没有办法在每次运行 "rails server" 时自动运行那个 rake 命令?
我在本地主机上。 lib/tasks/resque.rake
require 'resque/tasks'

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

如果您不想保持终端与Resque打开,可以尝试在后台运行Resque Resque background - suhovius
谢谢,非常完美!@AlexeySukhoviy 你知道如何避免在每次重启服务器时重新运行它吗? - sparkle
顺便提一下,如果你在后台运行它,你可以通过使用kill -9 <pid>命令将其作为进程杀死来停止它。其中pid是resque进程的pid。 但是出于开发目的,我建议你不要在后台运行resque。对我来说,最好在另一个终端中启动它,并且只有在我对resque进程操作的代码进行了一些更改时才重新启动它。 - suhovius
也许你能帮我解决这个问题?http://stackoverflow.com/questions/24726631/how-to-start-resque-not-using-rails - meso_2600
3个回答

12

你可以使用像foreman这样的宝石来调用所有其他任务,而不是调用invoke函数。 如果你想要一个大多数平台中立的解决方案,并且在部署到云时也很有用。 你的Procfile可以包含以下内容:

web:    bundle exec thin start -p $PORT
worker: bundle exec rake resque:work QUEUE=*
clock:  bundle exec rake resque:scheduler

来源:介绍foreman

现在,您只需发出foreman start命令即可启动服务器,该命令将分叉子线程以执行单独的工作。


2

编辑:2012年的答案!似乎这仅适用于Rails 2!

在config / initializers中添加一个初始化程序,类似于以下内容:

Rake::Task["resque:work QUEUE='*'"].invoke

未经测试!


1
我知道,我只是为了让用户着陆在这里而进行了说明。 :) - Pak

0

最好的方法是

ENV['QUEUE'] = "*"
Rake::Task["resque:work"].invoke

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