Module: RocketJob::Plugins::Restart
- Extended by:
- ActiveSupport::Concern
- Included in:
- Jobs::DirmonJob
- Defined in:
- lib/rocket_job/plugins/restart.rb
Overview
Automatically starts a new instance of this job anytime it fails, aborts, or completes.
Notes:
-
Restartable jobs automatically abort if they fail. This prevents the failed job from being retried.
-
To disable this behavior, add the following empty method:
def rocket_job_restart_abort end
-
-
On destroy this job is destroyed without starting a new instance.
-
On Abort a new instance is created.
-
Include ‘RocketJob::Plugins::Singleton` to prevent multiple copies of a job from running at the same time.
-
The job will not be restarted if:
-
A validation fails after creating the new instance of this job.
-
The job has expired.
-
-
Only the fields that have ‘copy_on_restart: true` will be passed onto the new instance of this job.
Example:
class RestartableJob < RocketJob::Job
include RocketJob::Plugins::Restart
# Retain the completed job under the completed tab in Rocket Job Mission Control.
self.destroy_on_complete = false
# Will be copied to the new job on restart.
field :limit, type: Integer, copy_on_restart: true
# Will _not_ be copied to the new job on restart.
field :list, type: Array, default: [1,2,3]
# Set run_at every time a new instance of the job is created.
after_initialize set_run_at, if: :new_record?
def perform
puts "The limit is #{limit}"
puts "The list is #{list}"
'DONE'
end
private
# Run this job in 30 minutes.
def set_run_at
self.run_at = 30.minutes.from_now
end
end
job = RestartableJob.create!(limit: 10, list: [4,5,6]) job.reload.state # => :queued
job.limit # => 10
job.list # => [4,5,6]
# Wait 30 minutes …
job.reload.state # => :completed
# A new instance was automatically created. job2 = RestartableJob.last job2.state # => :queued
job2.limit # => 10
job2.list # => [1,2,3]