openstreetmap-website/db/migrate/20181031113522_create_delayed_jobs.rb
Andy Allan 801522c5c3 Set up Delayed Job as the backend for Active Job
This persists jobs into the database, and uses locking to ensure that
workers from multiple machines avoid treading on each other.

Jobs can be run by using `bundle exec rake jobs:work`

Fixes #2015
2018-10-31 15:31:32 +01:00

22 lines
1.3 KiB
Ruby

class CreateDelayedJobs < ActiveRecord::Migration[5.2]
def self.up
create_table :delayed_jobs, :force => true do |table|
table.integer :priority, :default => 0, :null => false # Allows some jobs to jump to the front of the queue
table.integer :attempts, :default => 0, :null => false # Provides for retries, but still fail eventually.
table.text :handler, :null => false # YAML-encoded string of the object that will do work
table.text :last_error # reason for last failure (See Note below)
table.datetime :run_at # When to run. Could be Time.zone.now for immediately, or sometime in the future.
table.datetime :locked_at # Set when a client is working on this object
table.datetime :failed_at # Set when all retries have failed (actually, by default, the record is deleted instead)
table.string :locked_by # Who is working on this object (if locked)
table.string :queue # The name of the queue this job is in
table.timestamps :null => true
end
add_index :delayed_jobs, [:priority, :run_at], :name => "delayed_jobs_priority"
end
def self.down
drop_table :delayed_jobs
end
end