views:

95

answers:

3

A certain function in my controller takes a lot of time to process (heavy db work) . So when my user clicks on "submit" on the form he has to wait for the process to complete which is quite long. Is there any way that on "submitting", the user is redirected to the next view without any delay while the processing continues in the back-end without making the user wait ? Thanks & Cheers !

A: 

For things like this, I usually dump things into a database queue, and then use a cronjob to actually run it.

For instance, say I had to send out an email to all the clients using the software. I'd put the message into a database table, along with some information about who should get it, and then a cron job would actually do the sending.

synic
+2  A: 

When the user's request is made, queue up the job and then redirect the request where you want it.

There are two popular Ruby Gems for job processing:

Delayed Job
Resque

Delayed job is probably the easier to setup since it does not require Redis.

The Who
A: 

It sounds to me that you need to fork the process that takes so long. For example:

fork { "this code is being ran in background" }

The problem is that this code won't work nice with sql since the connection is not persistent. To handle this problem I've been using the spawn plugin for a while with excelent results.

vise