[Backgroundrb-devel] Problems running backgroundrb

hemant gethemant at gmail.com
Tue Feb 12 21:03:49 EST 2008


On Tue, Feb 12, 2008 at 12:05 AM, John Wells
<lists at sourceillustrated.com> wrote:
>
> On Feb 11, 2008 1:28 PM, hemant <gethemant at gmail.com> wrote:
>  > On Mon, Feb 11, 2008 at 8:20 PM, John Wells <lists at sourceillustrated.com> wrote:
>  > > On Feb 11, 2008 5:03 AM, hemant kumar <gethemant at gmail.com> wrote:
>  > >  >
>  > >  > On Mon, 2008-02-11 at 00:55 -0800, Alex Soto wrote:
>  > >  > > does require 'lib/formatters' work?
>  > >  > >
>  > >  > >
>  > >  > > On Feb 10, 2008, at 10:11 PM, John Wells wrote:
>  > >  > >
>  > >  > > > Hi guys,
>  > >  > > >
>  > >  > > > New to backgroundrb, and I like it very much conceptually, but I'm
>  > >  > > > struggling to get it to run successfully. I started with trunk, but
>  > >  > > > was getting a very strange gem require error when starting a worker
>  > >  > > > (though it wasn't telling me which gem was missing)....see here:
>  > >  > > > http://pastie.caboo.se/150225
>  > >  >
>  > >  > Its not complaining about any missing gems, rather its not able to load
>  > >  > workers defined inside lib/workers directory. You must define at least
>  > >  > one worker, before you can start bdrb. In case, you have already defined
>  > >  > a worker, Can we have a look at the code of your worker?
>  > >
>  > >  Thanks for your help. Sure thing...the code is below. However, I'm
>  > >  very curious...how did you determine this was the problem? Just so I
>  > >  know what to look for in the future.
>  >
>  > Because, when I saw error at:
>  >
>  > http://pastie.caboo.se/150225
>  >
>  > It clearly says thats start_worker is failing on 114 line. Generally
>  > this happens, when bdrb is not able to load a particular worker file.
>  > Also, you see empty string "gem_original_require': no such file to
>  > load --  (LoadError)" because bdrb is not able to get name of worker
>  > file to load correctly.
>  >
>  >
>  >
>  > >
>  > >  ===== controller that instantiates worker =====
>  > >  class Admin::BatchController < Admin::ApplicationController
>  > >
>  > >   def initialize
>  > >     super
>  > >     @formats = GW::BatchListing::ListingRow.formats
>  > >     @part_of = :admin
>  > >   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
>  > >     errors = "DONE " + MiddleMan.get_worker(session[:job_key]).errors
>  > >     if errors.size > 0
>  > >       flash[:notice] = errors.join("<br/>")
>  > >     else
>  > >       flash[:notice] = "Successful load."
>  > >     end
>  > >     MiddleMan.delete_worker(session[:job_key])
>  > >   end
>  > >
>  > >   def add
>  > >     @user = User.find(params[:id])
>  > >     @cats = Category.find(:all, :conditions=>"parent_id is null")
>  > >     if request.post?
>  > >       listings = params[:listings]
>  > >       content_type = listings.content_type.chomp
>  > >       if "application/zip"!=content_type and
>  > >          "application/x-zip-compressed"!=content_type
>  > >         flash[:notice] =
>  > >           "Only files of type application/zip " +
>  > >           "and application/x-zip-compressed " +
>  > >           "can be used. You uploaded #{content_type}."
>  > >       else
>  > >         # write out to tmp file
>  > >         tmpfile = "/tmp/#{rand 500000}.zip"
>  > >         open(tmpfile, "w") do |f|
>  > >           f << listings.read
>  > >         end
>  > >         parser =
>  > >           GW::BatchListing::ListingParser.new(params[:format],
>  > >                                                         params[:listing_type],
>  > >                                                         @user)
>  > >         session[:job_key] =
>  > >             MiddleMan.new_worker(:class => :foo_worker,
>  > >                                  :args => parser)
>  > >       end
>  > >     end
>  > >   end
>  > >  end
>  > >
>  >
>  > There are couple of problems with above code, for example,
>  > MiddleMan.get_worker is not defined. To get an idea about, which
>  > methods are defined for MiddleMan, have a look at,
>  >
>  > http://backgroundrb.rubyforge.org/classes/BackgrounDRb/WorkerProxy.html
>  >
>  > Also, you should read README file that comes with plugin.
>  >
>  > >  ===== and the worker itself =====
>  > >  class BatchImportWorker < BackgrounDRb::MetaWorker
>  > >   attr_reader :progress
>  > >   attr_reader :errors
>  > >   set_worker_name :batch_import_worker
>  > >
>  > >   def create(args = nil)
>  > >     # this method is called, when worker is loaded for the first time
>  > >   end
>  > >
>  > >   def do_work(parser)
>  > >     @progress = 0
>  > >     @errors = parser.process(tmpfile)
>  > >   end
>  > >  end
>  >
>  > Well, I find  no problems with above worker code, and it should load.
>  > Create a fresh rails app and see if bdrb works there.
>
>
> Ok, sorry... I was working from the old InfoQ article by Ezra and the
>  api docs. I probably made some bad assumptions there...I will take a
>  hard look and try it again.
>
>  Thanks for your help!

Just catching up on this. So, did you manage to get it work after
reading latest docs?
If yes, can you tell us, why bdrb was not able to load your worker?


More information about the Backgroundrb-devel mailing list