[Backgroundrb-devel] backgroundrb noob question

Max Williams toastkid.williams at gmail.com
Wed Oct 14 10:06:29 EDT 2009


ah yeah, big imports from text files do take forever if you use AR, don't
they.

I never use worker_new, i always just say something like

result = MiddleMan.worker(:lmail_worker).enq_mail_confirmation_letters(:arg
=> {:user_ids => users.collect(&:id), :password => password, :options =>
options}, :job_key => job_key)

2009/10/14 Chris Sund <chris at silhouettesolutions.net>

> Hey Max,
>
> Thanks for the reply. I want to move this back to AR that's why I want to
> implement backgroundrb. This process can take up to 29 minutes using Active
> Record where if I do straight SQL inserts it's a 2 minute process. I'm
> importing about 200K records at a time.  I don't like programming outside
> the box though and the downside is I loose the ability to do validations and
> other nifty AR functions which I think is more useful than the time issue.
> In any case I had another question...
>
> 1.) What is the difference between MiddleMan.worker & Middleman.worker_new
> ? This is my biggest hang up. I'm not sure how to call the worker
> appropriately so it will create a session and fire my function
>
> Thanks!
>
> Chris
>
>
> On Wed, Oct 14, 2009 at 2:17 AM, Max Williams <toastkid.williams at gmail.com
> > wrote:
>
>> I'm a bit of a backgroundrb noob, though i do use it for several different
>> things.  I usually follow the paradigm of keeping the controller code as
>> similar as possible, but instead of calling the original model method,
>> calling a new model method which calls a backgroundrb task, which in turn
>> calls the *original* model method.  eg instead of this
>>
>> -controller calls 'my_obj.do_heavy_lifting'
>> -instance method do_heavy_lifting runs and returns
>> -controller continues
>>
>> I do this
>>
>> - controller calls 'my_obj.background_do_heavy_lifting'
>> - instance method background_do_heavy_lifting runs:it just calls a worker
>> method and returns
>> - controller continues
>> - worker method (in the background) calls 'my_obj.do_heavy_lifting'
>> -instance method do_heavy_lifting runs (in the background) and returns
>>
>> Of course this assumes that do_heavy_lifting can be done asynchronously,
>> ie that the controller can carry on without waiting for it to finish.  But i
>> assume that's the case because otherwise why use backgroundrb?
>>
>> BTW your code for adding a record to the database is kind of horrible and
>> very error prone - why can't you use AR::Base.create?
>>
>>
>> 2009/10/14 Chris Sund <chris at silhouettesolutions.net>
>>
>>> Hey Everyone,
>>>
>>> I'm trying to get backgroundrb running and I would consider myself an
>>> intermediate rails programmer. I have the following controller method that I
>>> would like to move to a worker method, but I'm not sure how to properly call
>>> it from my controller once I place it in the worker method. Any advice or
>>> help would be appreciated. Due to the fact I am still learning, code
>>> examples would be awesome, but not necessary. I can usually get things
>>> figured out given enough time.
>>>
>>> Thanks!
>>>
>>> Chris
>>>
>>>
>>> def download_reads
>>>
>>>     if fields_mapped?
>>>          mapped_fields.each do |row|
>>>
>>>            ActiveRecord::Base.connection.execute(
>>>                    "insert into readings(reading,
>>>                                             date,
>>>                                             year,
>>>                                accounting_period,
>>>                                       account_id,
>>>                                       water_usage,
>>>                                       created_at,
>>>                                       updated_at)
>>>                               values ('#{row[0]}',
>>>                                       '#{row[1]}',
>>>                                       '#{row[2]}',
>>>                                       '#{row[3]}',
>>>                                       '#{row[4]}',
>>>                                       '#{row[5]}',
>>>                                       '#{Time.current.to_s(:db)}',
>>>                                       '#{Time.current.to_s(:db)}');")
>>>
>>>          end
>>>          flash[:notice] = 'Water Readings Have Been Downloaded'
>>>         redirect_to :action => :download
>>>        else
>>>
>>>        end
>>>      rescue MapFields::InconsistentStateError
>>>        flash[:error] = 'Please try again'
>>>        redirect_to :action => :download
>>>      rescue MapFields::MissingFileContentsError
>>>        flash[:error] = 'Please upload a file'
>>>        redirect_to :action => :download
>>>
>>>    end
>>>
>>>
>>> _______________________________________________
>>> Backgroundrb-devel mailing list
>>> Backgroundrb-devel at rubyforge.org
>>> http://rubyforge.org/mailman/listinfo/backgroundrb-devel
>>>
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://rubyforge.org/pipermail/backgroundrb-devel/attachments/20091014/8fb6821b/attachment.html>


More information about the Backgroundrb-devel mailing list