Preparing an Asynchronous Response with ActionController

Hello,

I was wondering if there's an easy way to make ActionController render a response in an asynchronous background process.

I have a large object graph which takes over a minute to serialize in amf:

render :amf => myData

I'd like to render() the amf serialization in a workling process and store the results in memcache key'd by original msg-id so the client can get the serialized result in a subsequent request.

Is there a simple way to perform the render() operation outside the context of the controller? Something like:

MyController.new.render({:amf=>myData})

(of course, render() is a protected method, so I can't do that. And I'm also not sure where to obtain the serialized result since render() is void).

Thanks,

Tom

Tom Shealy wrote:

Hello,

I was wondering if there's an easy way to make ActionController render a response in an asynchronous background process.

I have a large object graph which takes over a minute to serialize in amf:

render :amf => myData

I'd like to render() the amf serialization in a workling process and store the results in memcache key'd by original msg-id so the client can get the serialized result in a subsequent request.

Is there a simple way to perform the render() operation outside the context of the controller? Something like:

MyController.new.render({:amf=>myData})

(of course, render() is a protected method, so I can't do that. And I'm also not sure where to obtain the serialized result since render() is void).

Thanks,

Tom

For something that takes that long your best bet is to pass it off to like Backgroundrb (http://backgroundrb.rubyforge.org/) or delayed_job (GitHub - tobi/delayed_job: Database backed asynchronous priority queue -- Extracted from Shopify) for processing.

I'm pretty sure you could call erb directly if you can't do it through the controller (and it's the actual render that takes the time):

http://www.ruby-doc.org/stdlib/libdoc/erb/rdoc/

Cheers Luke