Pergunta

I have an web based app that I built using Sinatra. From recent I was needing to collect data at regular intervals and store them in a database. For this I was told that I could use Resque and Clockwork gems in combine.

Every hour or so I need to do nearly 15 calculations based on the database and store the results in a database.

So this is the approach I took. I decided to make 15 classes that have the perform method ( the exact file I used for testing is below ). Then to do some thing similar to Resque.enqueue( GraphData ) for all 15 classes.

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

To trigger the operation for testing purposes, I created a rake task.

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 # }}}

As you see, in the GraphData class, under self.perform method I am writing to a file.

My problem is it doesn't! Have I done some thing wrong?

rake graph_data will show no output. The web interface will show a job in the Queue.

Additional Information

I added another Rake task for running the web interface.

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 # }}

Over their, some thing interesting is seen. As I run the rake task, under stats the pending value increases but not the processed.

Under queues -> graph_data I see some thing like this.

Class   Args
GraphData   []
GraphData   []
GraphData   []

What I ended up with:

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 # }}}
Foi útil?

Solução

Is this in development or production? From what you describe, it looks like you are not lauching the Resque process. How are you running your app? I'm more familiar with using Resque with Rails, but you should have to run something like:

rake resque:work QUEUE='*'

To have the resque worker start.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top