Resque - 未处理队列

3
我有一个基于Sinatra构建的Web应用程序。最近我需要定期收集数据并将其存储在数据库中。为此,我被告知可以结合使用Resque和Clockwork gem。
每隔一小时左右,我需要根据数据库进行近15个计算,并将结果存储在数据库中。
所以这是我采取的方法。我决定制作15个具有执行方法(我用于测试的确切文件如下)的类。然后对所有15个类执行类似于“Resque.enqueue(GraphData)”的操作。
class GraphData

  @queue = :graph_data

  def self.init()

  end

  def self.perform()
    File.open( '/home/ziyan/Desktop/resque.txt', 'a' ) { | file | file.write( "Resqueu - performed - #{Time.now}\n" ) }
  end

end

为了进行测试目的,我创建了一个rake任务来触发该操作。
desc "Start Resque Workers for Queue" # {{{
task :graph_data do |t|

  ENV["QUEUE"]      = "*"
  ENV["VVERBOSE"]   = "1"
  ENV["INTERVAL"]   = "5"

  Resque.enqueue( GraphData )
  #resque = Resque.new
  #resque << AdminWorker.new
end # }}}

如你所见,在GraphData类中,在self.perform方法下我正在写入文件。 我的问题是它没有!我做错了什么吗? rake graph_data不会显示任何输出。网络界面将在队列中显示一个作业。 额外信息 我添加了另一个Rake任务来运行网络界面。
desc "Start Resque Web Frontend" # {{{
task :resque_web_frontend do |t|
  sh "resque-web -p 8282"
  puts "Resque Web Frontend is running on http://localhost:8282"
end # }}

看到了一件有趣的事情。当我运行rake任务时,在stats下,pending值增加了,但是processed没有增加。

在队列 -> graph_data 下,我看到了这样的东西。

Class   Args
GraphData   []
GraphData   []
GraphData   []

我最终得到的是:
desc "Start Resque Workers for Queue" # {{{
task :graph_data do |t|

  ENV["QUEUE"]      = "*"
  ENV["VVERBOSE"]   = "1"
  ENV["INTERVAL"]   = "5"

  Rake::Task[ "resque:work" ].invoke
  Resque.enqueue( GraphData )
  #resque = Resque.new
  #resque << AdminWorker.new
end # }}}
1个回答

8

这是在开发环境还是生产环境?根据您的描述,看起来您没有启动Resque进程。您如何运行应用程序?我更熟悉在Rails中使用Resque,但您应该运行类似以下命令:

rake resque:work QUEUE='*'

开始运行Resque工作线程。

哦,没错...你说得对...我还有一个问题。当我运行rake任务时,每5秒钟它会显示“等待5秒钟”等等并重复。这个重复是什么意思?它并没有重复执行任务。所以这就是我需要使用Clockwork每小时完成任务的地方? - Ziyan Junaideen
不确定,但很可能是Resque工作者每5秒轮询一次,以查看是否有任务需要执行(即查看队列是否有任务需要处理)。您可以使用resque_scheduler gem来定期运行作业。 - Martin
对于任何遇到加载错误的人,请使用以下命令:QUEUE=* rake environment resque:work - 6ft Dan

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