[Backgroundrb-devel] Trouble using backgroundrb

Ger Apeldoorn gapeldoorn at wehkamp.nl
Mon Sep 24 10:06:00 EDT 2007


Hi Tieg,

Thanks a lot for your reply!

Unfortunately, I'm not there yet.. After I adapt the new_worker call,
this is the error I get:

uninitialized constant Passwd

So, it really doesnt know how to handle namespaces it appears. Can you
see any way to get around that? If I generate the worker without the
namespace, can I call it from within the passwd namespace?

Thanks again,
Ger.

On Mon, 2007-09-24 at 09:59 -0400, Tieg Zaharia wrote:
> I'm not sure if this is your problem, but I think you should include
> two colons in the worker klass name, like this:
> 
> ...new_worker(:class => "passwd::get_passwds_worker", :args => "")... 
> 
> Also, BackgrounDRb uses a method in the middleman.rb file called
> worker_klass_constant(), from whence it derives the constant name.
> This is the constant that BackgrounDRb will look for after passing
> your class name to that method: 
> 
> "Passwd::getPasswdsWorker"
> (whereas you want Passwd::GetPasswdsWorker)
> 
> That might be a bug (or a feature enhancement if BDrb doesn't support
> namespaced workers yet), so the right way would be to patch that
> method. Orrr, you could just pass the real name of the worker in your
> controller, like this.. 
> 
> session[:job_key] = MiddleMan.new_worker(:class =>
> "Passwd::GetPasswdsWorker", :args => {})...
> 
> 
> -tieg
> 
> 
> On 9/24/07, Ger Apeldoorn <gapeldoorn at wehkamp.nl> wrote:
>         Hi all, 
>         
>         I'm a newbie to backgroundrb and am having trouble integrating
>         it into
>         my rails-app. I'm using namespaces to differentiate between
>         the parts of
>         my app.
>         
>         When I want to create a new worker, it seems that it cannot
>         find the 
>         worker object. Here's my code:
>         
>         -------------------- controller app/passwd/index
>         --------------------
>         class Passwd::IndexController < ApplicationController
>           layout 'default'
>         
>           def index 
>             $subtitle = "AIX user inventory tool"
>           end
>         
>           def createReport
>             Passwdentry.delete_all
>             User.delete_all
>             session[:job_key] = MiddleMan.new_worker(:class =>
>         "passwd:get_passwds_worker", :args => "") 
>           end
>         
>           def get_progress
>             if request.xhr?
>               progress_percent =
>         MiddleMan.get_worker(session[:job_key]).progress
>               render :update do |page|
>                 page.call('progressPercent', 'progressbar',
>         progress_percent) 
>                 page.redirect_to( :action => 'done') if
>         progress_percent >= 100
>               end
>             else
>               redirect_to :action => 'index'
>             end
>           end
>         
>           def done
>             render :text => "De database is bijgewerkt" 
>             MiddleMan.delete_worker(session[:job_key])
>           end
>         end
>         
>         --------------------lib/workers/get_passwds_worker.rb--------------------
>         # Put your code that runs your task inside the do_work method
>         it will be 
>         # run automatically in a thread. You have access to all of
>         your rails
>         # models.  You also get logger and results method inside of
>         this class
>         # by default.
>         class Passwd::GetPasswdsWorker <
>         BackgrounDRb::Worker::RailsBase 
>           attr_reader :progress
>           def do_work(args)
>             @progress = 0
>             @progressinterval = 100/System.count
>             System.find_all.each do |sys|
>               getAndParsePasswdFile(sys.name )
>               @progress += @progressinterval
>             end
>           end
>         
>           def getAndParsePasswdFile(sys)
>             output = %x[some command-line-magic ;)]
>             output.each do |outputline|
>               outputline = outputline.split (":")
>               thisline = Passwdentry.new
>               thisline.setvalues(outputline[0], sys, outputline[2]);
>               thisline.save
>             end
>           end
>         end
>         Passwd::GetPasswdsWorker.register
>         
>         --------------------app/views/passwd/index/createReport.rhtml-------------------- 
>         <h2>De database wordt voorzien van de laatste data.</h2>
>         <div id='progressbar' class="progress"></div>
>         <%= periodically_call_remote(:url => {:action =>
>         'get_progress'}, :frequency => 1) %> 
>         
>         --------------------conf/backgroundrb.yml--------------------
>         ---
>         :host: localhost
>         :port: 2000
>         :rails_env: development
>         :load_rails: true
>         :worker_dir: lib/workers
>         
>         Your help is *very much* appreciated! 
>         
>         Thanks,
>         Ger Apeldoorn
>         
>         _______________________________________________
>         Backgroundrb-devel mailing list
>         Backgroundrb-devel at rubyforge.org
>         http://rubyforge.org/mailman/listinfo/backgroundrb-devel
> 


More information about the Backgroundrb-devel mailing list