Sorry if this seems silly, only been learning Ruby and Rails for 2
weeks, though I have been programming since the Commodore 64 came out.
I need to process an XML file once it is uploaded (currently using
paperclip).
The problem is that the files can be quite slow to process, up to 30
seconds for some. Once this processing is done, I need to save that
data to the model to which the file is attached.
So my question is, where is the best place to call the processing
function from?
Will the processing block mongrel? Should it go in a new thread? If
so, how do I do that?
And is there any speedier Library than REXML for processing XML?
Yes, the processing will block mongrel, but you should have more than one
mongrel (either using Passenger, or straight apache load balancing). The
bigger question is can your user wait 30 seconds for the response? There
are ways to run the process on a separate thread, but I haven't had to do
that yet.
Yes, libXML is *much* faster than REXML. We are in the process of changing
our code, but the XML code is entwined so far through our app it is a big
job.
As far as the users waiting goes, thats easy... They will wait as long
as I tell them to as long as I give them something to look at and a
reason (Spinning CD and a "Please wait, Reticulating Splines" message
perhaps). In fact the entire process isnt really a vital part of the
program, it is simply to display some extra information for other
users who may want to download it. So if that information was updated
say 5 minutes later, it wouldnt really matter.
In any event, I am having a look at starling and working to start a
threaded process in the background and update the record whenever it
finishes. If however libxml is as fast as you say, perhaps I simply
need to do some load balancing and make them wait.
Of course a major problem is that I still dont know where to call the
processor from. Rails can be extremely frustrating when you are still
learning it.