2013-08-23 76 views
2

我有一個基於Web的應用程序,我使用Sinatra構建。從最近我需要定期收集數據並將它們存儲在數據庫中。爲此我被告知可以使用ResqueClockwork寶石。Resque - 不處理隊列

每個小時左右我需要根據數據庫進行近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 # }}} 

回答

5

這是在開發或生產?從你所描述的,看起來你並沒有開發Resque過程。你如何運行你的應用程序?我更熟悉Resque with Rails,但您應該運行如下類似的操作:

rake resque:work QUEUE='*' 

讓resque worker啓動。

+0

噢呀......你是對的......我還有一個問題。當我運行rake任務時,它說5秒鐘......等待5秒鐘等等,然後重複。這是什麼重複?它不重複任務。所以這就是我需要使用'Clockwork'來完成每小時任務的地方? –

+0

不確定,但可能是Resque工作人員每5秒輪詢一次以查看是否有某件事要做(即查看隊列以查看是否有工作要選擇)。您可以使用resque_scheduler gem讓作業以固定間隔運行。 – Martin

+0

對於任何有加載錯誤的人,請使用:'QUEUE = * rake environment resque:work' –