【发布时间】:2013-08-24 02:09:24
【问题描述】:
我有一个使用 Sinatra 构建的基于 Web 的应用程序。从最近开始,我需要定期收集数据并将它们存储在数据库中。为此,有人告诉我可以在 combine 中使用 Resque 和 Clockwork gems。
每隔一小时左右,我需要根据数据库进行近 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 值会增加,但不会被处理。
在队列下 -> 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 # }}}
【问题讨论】: