2014-05-19 10:08:03 +00:00
|
|
|
# Active Job -- Make work happen later
|
2014-05-18 09:44:28 +00:00
|
|
|
|
|
|
|
Active Job is a framework for declaring jobs and making them run on a variety
|
|
|
|
of queueing backends. These jobs can be everything from regularly scheduled
|
|
|
|
clean-ups, billing charges, or mailings. Anything that can be chopped up into
|
|
|
|
small units of work and run in parallel, really.
|
|
|
|
|
|
|
|
It also serves as the backend for ActionMailer's #deliver_later functionality
|
|
|
|
that makes it easy to turn any mailing into a job for running later. That's
|
|
|
|
one of the most common jobs in a modern web application: Sending emails outside
|
|
|
|
of the request-response cycle, so the user doesn't have to wait on it.
|
|
|
|
|
|
|
|
|
2014-05-19 10:46:27 +00:00
|
|
|
## Usage
|
|
|
|
|
|
|
|
Declare a job like so:
|
|
|
|
|
|
|
|
```ruby
|
|
|
|
class MyJob < ActiveJob::Base
|
|
|
|
def perform(record)
|
|
|
|
record.do_work
|
|
|
|
end
|
|
|
|
end
|
|
|
|
```
|
|
|
|
|
|
|
|
Enqueue a job like so:
|
|
|
|
|
|
|
|
```ruby
|
|
|
|
MyJob.enqueue record
|
|
|
|
```
|
|
|
|
|
|
|
|
That's it!
|
|
|
|
|
|
|
|
|
2014-05-19 10:08:03 +00:00
|
|
|
## GlobalID support
|
2014-05-19 10:06:09 +00:00
|
|
|
|
|
|
|
Active Job supports GlobalID serialization for parameters. This makes it possible
|
|
|
|
to pass live Active Record objects to your job instead of class/id pairs, which
|
|
|
|
you then have to manually deserialize. Before, jobs would look like this:
|
|
|
|
|
|
|
|
```ruby
|
|
|
|
class TrashableCleanupJob
|
2014-05-19 10:46:27 +00:00
|
|
|
def perfom(trashable_class, trashable_id, depth)
|
2014-05-19 10:06:09 +00:00
|
|
|
trashable = trashable_class.constantize.find(trashable_id)
|
|
|
|
trashable.cleanup(depth)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
```
|
|
|
|
|
|
|
|
Now you can simply do:
|
|
|
|
|
|
|
|
```ruby
|
|
|
|
class TrashableCleanupJob
|
2014-05-19 10:46:27 +00:00
|
|
|
def perfom(trashable, depth)
|
2014-05-19 10:06:09 +00:00
|
|
|
trashable.cleanup(depth)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
```
|
|
|
|
|
|
|
|
This works with any class that mixes in ActiveModel::GlobalIdentification, which
|
|
|
|
by default has been mixed into Active Record classes.
|
|
|
|
|
|
|
|
|
2014-05-19 10:08:03 +00:00
|
|
|
## Supported queueing systems
|
2014-05-18 19:37:16 +00:00
|
|
|
|
|
|
|
We currently have adapters for:
|
|
|
|
|
|
|
|
* Resque 1.x
|
|
|
|
* Sidekiq
|
|
|
|
* Sucker Punch
|
2014-05-19 08:47:12 +00:00
|
|
|
* Delayed Job
|
2014-05-18 19:37:16 +00:00
|
|
|
|
|
|
|
We would like to have adapters for:
|
|
|
|
|
|
|
|
* beanstalkd
|
|
|
|
* rabbitmq
|
|
|
|
|
|
|
|
|
2014-05-19 10:08:03 +00:00
|
|
|
## Under development as a gem, targeted for Rails inclusion
|
2014-05-18 09:44:28 +00:00
|
|
|
|
|
|
|
Active Job is currently being developed in a separate repository until it's
|
|
|
|
ready to be merged in with Rails. The current plan is to have Active Job
|
|
|
|
be part of the Rails 4.2 release, but plans may change depending on when
|
|
|
|
this framework stabilizes and feels ready.
|
|
|
|
|
|
|
|
|
2014-05-19 10:08:03 +00:00
|
|
|
## License
|
2014-05-18 09:44:28 +00:00
|
|
|
|
|
|
|
Active Job is released under the MIT license:
|
|
|
|
|
|
|
|
* http://www.opensource.org/licenses/MIT
|