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