我有一个基于Sinatra构建的Web应用程序。最近我需要定期收集数据并将其存储在数据库中。为此,我被告知可以结合使用Resque和Clockwork gem。
每隔一小时左右,我需要根据数据库进行近15个计算,并将结果存储在数据库中。
所以这是我采取的方法。我决定制作15个具有执行方法(我用于测试的确切文件如下)的类。然后对所有15个类执行类似于“Resque.enqueue(GraphData)”的操作。
为了进行测试目的,我创建了一个rake任务来触发该操作。
如你所见,在
我最终得到的是:
每隔一小时左右,我需要根据数据库进行近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 # }}}
Clockwork
每小时完成任务的地方? - Ziyan JunaideenQUEUE=* rake environment resque:work
- 6ft Dan