[Backgroundrb-devel] error message for record not found ?

Ezra Zygmuntowicz ezmobius at gmail.com
Tue Feb 20 16:43:57 EST 2007


Bill-

	It looks like a standard record not found error. You should probably  
wrap your worker codes in begin .. rescue .. end block so you can  
catch that exception.

-Ezra

On Feb 20, 2007, at 12:48 PM, Bill Walton wrote:

> I'm using backgroundrb for session management and deletion of  
> visitor-entered information when a session is abandoned.  The  
> visitor can either click a button to end their session and remove  
> their data, or backgroundrb will do it for them after 5 minutes of  
> inactivity.
>
> Everything's working fine, I think.  If the visitor explicitly logs  
> out, then when the worker checks for their record it won't be there  
> which will trigger logic that says 'you're done. close the  
> connection and kill yourself'.  What makes me a little worried is  
> that I'm getting what looks like an error message in  
> backgroundrb.log.  I've included it below.  I've also included the  
> worker code.
>
> Can anybody tell me how to verify that the worker is actually  
> closing the connection and then creating suicide?  Versus dying  
> because of this failed find and not closing the connection correctly?
>
> Thanks,
> Bill
>
> ----------- log message -----------
> Couldn't find Emrec with ID=1 - (ActiveRecord::RecordNotFound)
> C:/InstantRails-1.3/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.2/ 
> lib/active_record/base.rb:955:in `find_one'
> C:/InstantRails-1.3/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.2/ 
> lib/active_record/base.rb:941:in `find_from_ids'
> C:/InstantRails-1.3/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.2/ 
> lib/active_record/base.rb:382:in `find'
> ./script/backgroundrb/../../config/../lib/workers/session_worker.rb: 
> 20:in `watch_session'
> ./script/backgroundrb/../../config/../lib/workers/session_worker.rb: 
> 12:in `do_work'
> ./script/backgroundrb/../../config/../vendor/plugins/backgroundrb/ 
> backgroundrb_rails.rb:36:in `start_process'
> ./script/backgroundrb/../../config/../vendor/plugins/backgroundrb/ 
> backgroundrb_rails.rb:32:in `start_process'
> ./script/backgroundrb/../../config/../vendor/plugins/backgroundrb/ 
> backgroundrb.rb:57:in `new_worker'
> C:/InstantRails-1.3/ruby/lib/ruby/1.8/thread.rb:135:in `synchronize'
> ./script/backgroundrb/../../config/../vendor/plugins/backgroundrb/ 
> backgroundrb.rb:49:in `new_worker'
> C:/InstantRails-1.3/ruby/lib/ruby/1.8/drb/drb.rb:1552:in  
> `perform_without_block'
> C:/InstantRails-1.3/ruby/lib/ruby/1.8/drb/drb.rb:1512:in `perform'
> C:/InstantRails-1.3/ruby/lib/ruby/1.8/drb/drb.rb:1586:in `main_loop'
> C:/InstantRails-1.3/ruby/lib/ruby/1.8/drb/drb.rb:1582:in `main_loop'
> C:/InstantRails-1.3/ruby/lib/ruby/1.8/drb/drb.rb:1578:in `main_loop'
> C:/InstantRails-1.3/ruby/lib/ruby/1.8/drb/drb.rb:1427:in `run'
> C:/InstantRails-1.3/ruby/lib/ruby/1.8/drb/drb.rb:1424:in `run'
> C:/InstantRails-1.3/ruby/lib/ruby/1.8/drb/drb.rb:1344:in `initialize'
> C:/InstantRails-1.3/ruby/lib/ruby/1.8/drb/drb.rb:1624:in  
> `start_service'
> script/backgroundrb/start:108
>
>
> ------------ Worker code ----------
> class SessionWorker < BackgrounDRb::Rails
>
>   attr_reader :time_remaining
>
>   def do_work(args)
>     @time_remaining = args[:initial_setting].to_i
>     @emrec_id = args[:emrec_id]
>     @session_id = args[:session_id]
>     @session_rec = Session.find(:first,
>                            :conditions => ["sessid = ?", @session_id])
>     watch_session(args)
>     sleep(2)
>     clean_up
>   end
>
>   def watch_session(args)
>     while @time_remaining > 0
>       sleep(1)
>       emrec = Emrec.find(@emrec_id)
>       if emrec != nil
>         if emrec.timer_suspended == 'no'
>           last_activity = emrec.last_updated_at
>           time_remaining_float = (last_activity + args 
> [:initial_setting].to_i) - Time.now
>           @time_remaining = time_remaining_float.to_i
>         end
>       else
>         @time_remaining = 0
>       end
>     end
>   end
>
>   def clean_up
>     emrec = Emrec.find(@emrec_id)
>     if emrec != nil
>       emrec.cleanup
>       Session.delete(@session_rec.id)
>     end
>     ActiveRecord::Base.connection.disconnect!
>     ::BackgrounDRb::MiddleMan.instance.delete_worker @_job_key
>   end
>
> end
> _______________________________________________
> Backgroundrb-devel mailing list
> Backgroundrb-devel at rubyforge.org
> http://rubyforge.org/mailman/listinfo/backgroundrb-devel

-- Ezra Zygmuntowicz 
-- Lead Rails Evangelist
-- ez at engineyard.com
-- Engine Yard, Serious Rails Hosting
-- (866) 518-YARD (9273)




More information about the Backgroundrb-devel mailing list