Simultaneous long-running tasks; Rake, Daemons, Delayed::Jobs?

Hi everyone,

I have an application where an essential part is communicating with a
remote API via SOAP. I want to be able to run 3-4 of these tasks at
once, and one task might take anything from one minute to several
hours, depending on the size of the data being sent. The app relies
heavily on ActiveRecord fetching fetching data (in_batches) and
updating it once the response from the API has been received.

I'm using Ruby 1.8.6 and Rails 2.3.4.

In an earlier version of this application (written in PHP), this was
set up as a cron job which called the relevant scripts via curl. This
was obviously not the best implementation, and so it was decided to
move to Rails.

After having done quite a bit of research, I can't for the life of me
figure out what the best approach to handle these long-running tasks
would be. Initially I was going to set them up as Rake tasks, and call
them with cron every minute. I had a database table with active tasks
and would only start the task if less than 4 tasks were already
running.

Then I discovered Daemons, and was trying to figure out if that would
be a better approach to my issue. And then, I discovered
Delayed::Jobs, which also could be helpful.

Naturally, I want to perform these tasks as efficiently as possible,
with the least amount of resources. The tasks will be more-or-less
around the clock, so I would probably rather have it run continually
(like a Daemon) than having to reload the libraries every time (which
I would have to do with Rake). On the other hand, I'm not sure how a
Daemon would handle concurrent tasks--threading, possibly?

With all of the different options out there, I'm getting more and more
confused by the minute. Help, anyone?

Best regards,
Sebastian

I'm using delayed_job and am happy with the ease of use.
I haven't had the need to run more than 1 queued job at a time, but
you can start any number of workers using the following syntax:

# This would allow up to four simultaneous jobs
$ RAILS_ENV=production script/delayed_job -n 4 start

Thank you for your reply.

I do like the look of Delayed::Job, and after seeing your reply I
discovered that I must have glossed over something important: That you
can set up multiple workers on one computer.

I also noticed that you can use Delayed::Job together with a Daemon:
http://wiki.github.com/tobi/delayed_job/running-delayedworker-as-a-daemon

Does anyone have experience with this setup? If so, how is it working
for you?

Best regards,
Sebastian