Hacker News new | ask | show | jobs
Tweet later with Delayed Job (collectiveidea.com)
11 points by bryckbost 5566 days ago
3 comments

I really appreciate that this example shows a useful testing strategy and handles the big scheduling gotcha (rescheduling jobs.) Neither are hard solutions once the answer is known, but having them spelled out will save someone a lot of time.
> What if you wanted to have a message scheduled to be tweeted 10 minutes before a blog was published?

Why?

That example may be contrived, but I've had a few projects in the past where I had to schedule tweets and this strategy is pretty slick and testable.
Seems like a lot of effort to avoid using cron.
I disagree. Cron is meant to run at specific intervals, not at specific, arbitrary times.

In apps where we're using this technique, we may have hundreds or thousands of jobs scheduled at various times in the future (appointment reminders are a great example). Cron would have to check every minute or two, whereas we have Delayed Job already running a queue. They just get pulled in when their time is right.

I doubt your jobs get pulled into the queue. You probably enqueue them and just inform your workers to execute them when the worker's Time.now > the job's run_at. This mean's you may have thousands of jobs in your queue at any moment. An advantage of using cron to schedule is that you won't have as many jobs in your queue at arbitrary times.
How does delayed_job work? Does it just run as a daemon in the background?
Yep, it runs in the background.

`script/delayed_job` can be used to manage the process or `rake jobs:work`. Either will start working off jobs.

It calls rake jobs:work.
Well, atd would be better, but sure.

Edit: Rubyists! Solving the problems of 30 years ago... today!