我有一个基于网络的应用程序,我使用Sinatra构建。从最近起,我需要定期收集数据并将它们存储在数据库中。为此我被告知我可以使用Resque
和Clockwork
宝石组合。
每小时左右我需要根据数据库进行近15次计算,并将结果存储在数据库中。
所以这就是我采取的方法。我决定制作15个具有perform
方法的类(我用于测试的确切文件如下)。然后为所有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
将不显示输出。 Web界面将在Queue
中显示作业。
其他信息
我添加了另一个Rake
任务来运行Web界面。
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
值会增加但不会处理。
在队列中 - &gt; 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 # }}}
答案 0 :(得分:6)
这是开发还是生产?从您描述的内容来看,您似乎并没有推出Resque流程。你是如何运行你的应用程序的?我对使用Resque with Rails更熟悉,但你应该运行类似的东西:
rake resque:work QUEUE='*'
让resque工作人员开始。