[Backgroundrb-devel] Instantiating middleman and worker from inside a model?

Jacob Robbins jrobbins at cmj.com
Tue Jan 16 11:58:08 EST 2007

as i understand it the S3Worker class does not need to be visible in the 
scope of the Image model. Only the MiddleMan class needs to be visible. 
You pass the :s3_worker symbol to the MiddleMan class and it uses that 
symbol to find the correct class on the other side of the drb connection 
  (ie in the backgroundrb_server process, not here in the rails process).

So i suggest going through a laundry list of different situations to see 
if this works anywhere in your code.
-is that erroneous parentheses in "def s3delete)" only in your email?
-can you call worker(:class => s3_worker) from the backgroundrb console?
-try making a different method for the image class does nothing but 
instantiate an s3_worker and calling it in the rails console.
-double check the class code for S3Worker to make sure the symbol 
:s3_worker will clearly resolve to both the class name and the file name.
-try removing the 3 from the class name; it's not supposed to be a 
problem because it's not the first character of the name but i feel like 
i've had a problem with numbers in class names before.


Tomasz Kaye wrote:
> I spoke too soon, i'm still stuck with the same problem (sorry). Perhaps 
> if i show how my model looks it'll be obvious what i'm doing wrong;
> class Image < ActiveRecord::Base   
>   def destroy
>       s3delete
>       super
>     end
>     def s3delete)
>       MiddleMan.new_worker(
>       :class => :s3_worker
>       )    
>     end 
> end
> When i call destroy on an image model I'm getting the error: "NameError 
> (uninitialized constant S3Worker):" . which is to be expected i suppose. 
> How should i make S3Worker visible in this scope?
> thanks again.
> On Jan 15, 2007, at 7:51 PM, Joshua Bates wrote:
>> Just call work_thread on the worker.
>> Something like....
>> def save_to_s3
>>   worker.work_thread(:method => :save, :args => [args])
>> end
>> def worker
>>   @worker ||= MiddleMan.worker(:s3)
>> end
>> If you need to pass the whole model to the worker, make sure to add
>> include DRbUndumped in your model.
>> On 1/15/07, *Tomasz Kaye* < tomasz at resourcestudio.nl 
>> <mailto:tomasz at resourcestudio.nl>> wrote:
>>     In short: how (if possible) would i go about arranging it so that i
>>     can instantiate a middleman and set a worker going from within a
>>     method in one of my models? or is this a weird thing to be wanting to
>>     do? (
>>     My specific situation: I have an 'Image' model in my application. An
>>     actual image file associated with the model is being stored on
>>     amazons s3 system. I'd like to use a worker to handle each s3
>>     operation (eg. deleting the image from s3). The Image model seems the
>>     neatest place to set the worker going but I'm a little stumped as to
>>     how i should modify my model to enable the instantiation of middleman
>>     within it.
>>     thanks in advance for any pointers!
>>     (apologies in advance if this message gets posted twice; i think my
>>     previous attempt didn't work)
>>     _______________________________________________
>>     Backgroundrb-devel mailing list
>>     Backgroundrb-devel at rubyforge.org
>>     <mailto:Backgroundrb-devel at rubyforge.org>
>>     http://rubyforge.org/mailman/listinfo/backgroundrb-devel
> ------------------------------------------------------------------------
> _______________________________________________
> Backgroundrb-devel mailing list
> Backgroundrb-devel at rubyforge.org
> http://rubyforge.org/mailman/listinfo/backgroundrb-devel

More information about the Backgroundrb-devel mailing list