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 -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Luke Pearce
2010-Mar-21 08:17 UTC
Re: Preparing an Asynchronous Response with ActionController
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, > > TomFor something that takes that long your best bet is to pass it off to like Backgroundrb (http://backgroundrb.rubyforge.org/) or delayed_job (http://github.com/tobi/delayed_job) 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 -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.