Bill Walton wrote:
If I understand your question correctly, you're looking for a
Ruby library / plugin. The standard library includes dRuby.
WRT doing the work in the same process that handled the request, the
architecture pretty much precludes that, at least as a 'best practice.'
Thanks Bill for the quick response.
Distributed Ruby is pretty heavyweight for what I have in mind. It has
a lot of moving parts. I was thinking lightweight that would just allow
me to time shift a few operations that can take a second or two so that
the page is returned first and then those operations are then performed.
(Example: queue an email.) I'd like to have access to the full cached
model when those post_processing operations run.
I poked around the source a little today and it seems feasible to patch
in at the RailsHandler::process(request, response) level. That method
could be aliased and replaced with a new process method:
alias :old_process :process
def process(request, response)
where post_process was something like
while task = @@background_tasks.shift
(The controllers would queue their slow operations onto
The timers supervision is to preclude them taking too much time away
from serving the next pages. And it would be best to not allow more
than one post_processing mongrel at a time for the same session (or
possibly IP:port), lest a runaway Ajax loop consume all the mongrels for
Does this sound feasible? Anyone know of some work along these lines