class XapianDb::BeanstalkWorker

Public Instance Methods

process_requests() click to toggle source
   # File lib/generators/templates/beanstalk_worker
16 def process_requests
17 
18   Rails.logger.info "XapianDb beanstalk worker: initializing..."
19   Rails.logger.flush
20 
21   begin
22     url = XapianDb::Config.beanstalk_daemon_url
23     beanstalk = Beanstalk::Pool.new([url])
24     worker    = XapianDb::IndexWriters::BeanstalkWorker.new
25     Rails.logger.info "XapianDb beanstalk worker: ready"
26     Rails.logger.flush
27   rescue Exception => ex
28     Rails.logger.error "cannot connect to beanstalk daemon: (#{ex}), terminating"
29     Rails.logger.flush
30     return
31   end
32 
33   loop do
34     job = beanstalk.reserve
35     begin
36       params = JSON.parse(job.body).symbolize_keys!
37       Rails.logger.info "XapianDb beanstalk worker: executing task #{params}"
38       Rails.logger.flush
39       task = params.delete :task
40       worker.send task, params
41       Rails.logger.info "XapianDb beanstalk worker: done"
42       Rails.logger.flush
43     rescue Exception => ex
44       Rails.logger.error "XapianDb beanstalk worker: could not process #{job.body} (#{ex})"
45       Rails.logger.flush
46     end
47     job.delete
48   end
49 end