Ruby's missing background and batch processing system
Ruby’s missing batch system
Checkout https://rocketjob.io/
The following plugins have been deprecated and are no longer loaded by default.
RocketJob::Batch::Tabular::Input
RocketJob::Batch::Tabular::Output
If your code relies on these plugins and you still want to upgrade to Rocket Job v6,
add the following require statement to any jobs that still use them:
require "rocket_job/batch/tabular"
It is important to migrate away from these plugins, since they will be removed in a future release.
For any scheduled jobs that include the RocketJob::Plugins::Cron
plugin, the default behavior has changed
so that the scheduled job instance is created immediately after the currently scheduled instance starts.
To maintain the old behavior of creating the job when it fails, aborts, or completes, add the following line
to each of the applicable jobs:
self.cron_after_start = false
Additionally, scheduled jobs will now prevent a new one from being created when another scheduled instance
of the same job is already queued, or running with the same cron_schedule
.
To maintain the old behavior of allowing multiple instances with the same cron schedule, add the following
line to each of the applicable jobs:
self.cron_singleton = false
Since Scheduled jobs now implement their own singleton logic, remove the singleton plugin from any scheduled jobs.
Rocket Job v6 replaces the array of symbol type for input_categories
and output_categories
with an array of RocketJob::Category::Input
and RocketJob::Category::Output
.
Jobs that added or modified the input or output categories need to be upgraded. For example:
class MyJob < RocketJob::Job
include RocketJob::Batch
self.output_categories = [:main, :errors, :ignored]
end
Needs to be changed to:
class MyJob < RocketJob::Job
include RocketJob::Batch
output_category name: :main
output_category name: :errors
output_category name: :ignored
end
These fields have been removed from the job itself:
class MyJob < RocketJob::Job
include RocketJob::Batch
self.slice_size = 1_000
self.encrypt = true
self.compress = true
end
They are now specified on the input_category
as follows:
slice_size
just moves under input_category
.encrypt
becomes an option to serializer
.compress
is now the default for all batch jobs so is not needed.If the serializer is set to encrypt
then it is automatically compressed.
class MyJob < RocketJob::Job
include RocketJob::Batch
input_category slice_size: 1_000, serializer: :encrypt
end
The following fields have been moved from the job itself:
class MyJob < RocketJob::Job
include RocketJob::Batch
self.collect_output = true
self.collect_nil_output = true
end
Into the corresponding output_category
:
collect_output
no longer has any meaning. Output is collected anytime an output_category
is defined.collect_nil_output
is now the option nils
on the output_category. It defaults to
falseso that by default any
niloutput from the
perform` method is not collected.class MyJob < RocketJob::Job
include RocketJob::Batch
output_category nils: true
end
For both input_category
and output_category
, when the name
argument is not supplied
it defaults to :main
.
For Example:
class MyJob < RocketJob::Job
include RocketJob::Batch
input_category name: :main, serializer: :encrypt
output_category name: :main
end
Is the same as:
class MyJob < RocketJob::Job
include RocketJob::Batch
input_category serializer: :encrypt
output_category
end
When migrating to Rocket Job 6, it is recommended to load every job and then save it back again as part of the
deployment. When the job loads it will automatically convert itself from the old schema to the new v6 schema.
In flight jobs should not be affected, other than it is important to shutdown all running batch
servers before running any new instances.
Rocket Job Pro is now fully open source and included in Rocket Job under the Apache License.
The RocketJob::Batch
plugin now adds batch processing capabilities to break up a single task into many
concurrent workers processing slices of the entire job at the same time.
Example:
class MyJob < RocketJob::Job
include RocketJob::Batch
self.description = "Reverse names"
self.destroy_on_complete = false
# Collect the output for this job in the default output category: `:main`
output_category
# Method to call by all available workers at the same time.
# Reverse the characters for each line:
def perform(line)
line.reverse
end
end
Upload a file for processing, for example names.csv
which could contain:
jack
jane
bill
john
blake
chris
dave
marc
To queue the above job for processing:
job = MyJob.new
job.upload('names.csv')
job.save!
Once the job has completed, download the results into a file:
job.download('names_reversed.csv')
To contribute to the documentation it is as easy as forking the repository
and then editing the markdown pages directly via the github web interface.
For more complex documentation changes checkout the source code locally.
cd docs
bundle update
jekyll serve
/docs
folder.Once the changes are complete, submit a github pull request.
V3 replaces MongoMapper with Mongoid which supports the latest MongoDB Ruby client driver.
Replace mongo.yml
with mongoid.yml
.
Start with the sample mongoid.yml.
For more information on the new Mongoid config file.
Note: The rocketjob
and rocketjob_slices
clients in the above mongoid.yml
file are required.
Arguments are no longer supported, use fields for defining all named arguments for a job.
Replace usages of rocket_job do
to set default values:
rocket_job do |job|
job.priority = 25
end
With:
self.priority = 25
key
with field
when adding attributes to a job: key :inquiry_defaults, Hash
With:
field :inquiry_defaults, type: Hash, default: {}
public_rocket_job_properties
with the user_editable
option:field :priority, type: Integer, default: 50, user_editable: true
Rocket Job is tested and supported on the following Ruby platforms:
This project uses Semantic Versioning.