Posted by ezmobius Sun, 02 Jul 2006 01:44:00 GMTHowdy Folks-
I'm happy to announce a new release of BackgrounDRb! I have added quite a few new features and included some nice patches from folks on the list.
$ script/plugin install svn://rubyforge.org//var/svn/backgroundrb
Click through for the details.
All of the code now stays within the plugin and the start and stop scripts are now just stubs. This makes it easier to tweak or figure out how it works. The backgroundrb.rb file in the root of the plugin dir is the drb server part of MiddleMan and the pluginroot/lib/backgroundrb.rb file is the rails client side MiddleMan.
One of the new things is much better threading job control. This is mostly invisible to you as a user of the plugin but it makes the whole system a lot more sturdy. It gives your worker objects the chance to clean up after themselves when they get deleted instead of just getting the kill brick dropped on them ;) Thanks to David Lemstra for the job management code!
The other big new feature is a built in timer and a time to live argument for workers and caches. This allows you to set how long a worker or a cache survives before it gets reaped. The :ttl param defaults to :immortal for worker classes and 10 minutes for cached objects. If you don;t specify the :ttl param then your workers will only get reaped if you directly call delete_worker on them or use gc! to override. If you want longer or shorter ttl's then specify :ttl in *seconds* like this:
#worker session[:job_key] = MiddleMan.new_worker(:class => :foo_worker, :args => "Bar", :ttl => 300) # 300 seconds == 5 minutes #caching #fill_cache, expire in 5 minutes @posts = Post.find(:all, :include => :comments) MiddleMan.cache_as(:post_cache, 300, @posts) #OR @posts = MiddleMan.cache_as :post_cache, 300 do Post.find(:all, :include => :comments) end #retrieve_cache @posts = MiddleMan.cache_get :post_cache do Post.find(:all, :include => :comments) end
By default the timer_sleep is set to 60 seconds. This means that the timer will wakeup every 60 seconds and delete caches and worker that are past their time to live. You can change this in the config file if you want it to run faster or slower.
All your worker classes should now inherit from BackgrounDRb::Rails so they get all the good new thread management features. If you are already using the plugin you should delete the plugin from your rails app and reinstall it. You should also delete the script/backgroundrb directory and the config/backgroundrb.yml file. Then run:
# to install the new code. $ rake backgroundrb:setup
Your workers should not need to change as long as they inherit from BackgrounDRb::Rails. Please test this and give me feedback if you are using it. I would also like to start collecting worker classes or at least hear what folks are using this plugin for.
*Home page: http://backgroundrb.rubyforge.org *svn repo: svn://rubyforge.org//var/svn/backgroundrb *Mailing list: http://rubyforge.org/mailman/listinfo/backgroundrb-devel