ActiveJob – gem for defining background jobs in Rails
github.com
github.com
But by the looks of it the library bundles in the adapters to talk directly to these worker frameworks (currently it only is Resque). Are we going to see an active merging in of adapters or will at some point will the response be 'we won't be allowing any more adapters to bundled'.
https://github.com/dwbutler/multi_worker
Haven't tried it yet but looks promising.
I'd rather see some more interesting things going into core, such as https://github.com/kickstarter/rack-attack, that should be used by nearly every app.
Resque, DelayedJob, Sidekiq... All have their drawbacks/benefits. I know this can just work as a 'wrapper', but in an agency environment, i've used queueing on about 20% of sites.
Absolutely no reason to want to put this in core imo.
I'm personally for this idea, I've used DJ, Resque and Sidekiq, all in the same project (increasing load), and in that order; It would have been much nicer to have to only change the Gemfile when I made the switch.
Your comment, whilst a perfectly valid concern, reminds me of an article DHH posted: http://david.heinemeierhansson.com/2012/rails-is-omakase.htm...
Overcomplicating the rails 'core' is my concern. I'd much rather start from a lightweight 'base' which solves most of the common cases and pull in extras as required for what i'm working on.
Rails should be a framework that allows you to layer extra functionality ontop of it.
Background jobs are a common case. How many web applications never send an e-mail?
Example, you'd prefer A to B?
A) $ rails new foo_app # add 'active_job' if/when you want it
B) $ rails new foo_app --skip-active-job # forced to rip it out
EDIT: I think you answered my question in another sub-comment. No reply requested unless you have something new to add
Cron is a POSIX task scheduler, this is a Ruby normalized API for background job systems.
This is an extraordinarily common pattern in web applications. My Rails apps do it hundreds of thousands of times per day, often to avoid hitting an external API during a request/response cycle. (I use Delayed::Job. This would not be my #1 recommendation for this pattern in 2014. Take a look at Sidekiq, Resque, or this new thing instead.)
If you ever wanted to upgrade form delayed job, this could come in handy for you.
Often, there are certain activities you might want to do in a way that doesn't block the request/response cycle, but still have them performed as soon as possible. For example, a user buys a widget on your site - send a receipt email. You don't want the "Thanks for buying" success page response to wait for your servers to compose & send the email, so you offload the email to your queue system.
Background jobs takes that 1000 deliveries job and puts it into the background queue, then a worker starts sending those emails right away. Meanwhile your app returns from your request instantly so you can continue doing what you were doing while the job is executed in the background.
For instance:
* Use cron to dump a database backup nightly
* Use some job system to send a user an email after they sign up
There's a lot of overlap, and if used cleverly (which may not be smart), they can both achieve the same goals.