diff --git a/Gemfile b/Gemfile index 8a0af10..533fd4a 100644 --- a/Gemfile +++ b/Gemfile @@ -35,6 +35,7 @@ gem 'sorcery' gem 'will_paginate', '~> 3.0' gem 'activerecord-postgresql-adapter' gem 'pg' +gem 'delayed_job_active_record' group :production do gem 'unicorn' diff --git a/Gemfile.lock b/Gemfile.lock index 7508b69..6b42dda 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -48,6 +48,11 @@ GEM coffee-script-source (1.4.0) curb (0.7.18) debug_inspector (0.0.2) + delayed_job (3.0.5) + activesupport (~> 3.0) + delayed_job_active_record (0.4.3) + activerecord (>= 2.1.0, < 4) + delayed_job (~> 3.0) erubis (2.7.0) execjs (1.4.0) multi_json (~> 1.0) @@ -171,6 +176,7 @@ DEPENDENCIES better_errors binding_of_caller coffee-rails (~> 3.2.1) + delayed_job_active_record feedzirra haml-rails htmlentities diff --git a/db/migrate/20130326114555_create_delayed_jobs.rb b/db/migrate/20130326114555_create_delayed_jobs.rb new file mode 100644 index 0000000..e784160 --- /dev/null +++ b/db/migrate/20130326114555_create_delayed_jobs.rb @@ -0,0 +1,22 @@ +class CreateDelayedJobs < ActiveRecord::Migration + def self.up + create_table :delayed_jobs, :force => true do |table| + table.integer :priority, :default => 0 # Allows some jobs to jump to the front of the queue + table.integer :attempts, :default => 0 # Provides for retries, but still fail eventually. + table.text :handler # 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 + end + + add_index :delayed_jobs, [:priority, :run_at], :name => 'delayed_jobs_priority' + end + + def self.down + drop_table :delayed_jobs + end +end diff --git a/db/schema.rb b/db/schema.rb index 37951d4..dead5cd 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,23 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20130320181527) do +ActiveRecord::Schema.define(:version => 20130326114555) do + + create_table "delayed_jobs", :force => true do |t| + t.integer "priority", :default => 0 + t.integer "attempts", :default => 0 + t.text "handler" + t.text "last_error" + t.datetime "run_at" + t.datetime "locked_at" + t.datetime "failed_at" + t.string "locked_by" + t.string "queue" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + add_index "delayed_jobs", ["priority", "run_at"], :name => "delayed_jobs_priority" create_table "feeds", :force => true do |t| t.string "title" @@ -29,7 +45,7 @@ ActiveRecord::Schema.define(:version => 20130320181527) do t.integer "layer_id" end - add_index "feeds_layers", ["feed_id", "layer_id"], :name => "index_feeds_layers_on_feed_id_and_layer_id" + add_index "feeds_layers", ["feed_id", "layer_id"], :name => "index_feeds_layers_on_feed_id_and_layer_id", :unique => true create_table "layers", :force => true do |t| t.string "name" diff --git a/script/delayed_job b/script/delayed_job new file mode 100755 index 0000000..edf1959 --- /dev/null +++ b/script/delayed_job @@ -0,0 +1,5 @@ +#!/usr/bin/env ruby + +require File.expand_path(File.join(File.dirname(__FILE__), '..', 'config', 'environment')) +require 'delayed/command' +Delayed::Command.new(ARGV).daemonize