Added delayed jobs
This commit is contained in:
parent
ec90fe57f2
commit
a7b36e6d0e
26
Gemfile
26
Gemfile
|
@ -2,32 +2,8 @@ source 'http://rubygems.org'
|
|||
|
||||
gem 'rails', '3.0.8'
|
||||
|
||||
# Bundle edge Rails instead:
|
||||
# gem 'rails', :git => 'git://github.com/rails/rails.git'
|
||||
|
||||
gem 'sqlite3'
|
||||
gem 'pg'
|
||||
gem 'awesome_print', :require => 'ap'
|
||||
|
||||
# Use unicorn as the web server
|
||||
# gem 'unicorn'
|
||||
|
||||
# Deploy with Capistrano
|
||||
# gem 'capistrano'
|
||||
|
||||
# To use debugger (ruby-debug for Ruby 1.8.7+, ruby-debug19 for Ruby 1.9.2+)
|
||||
# gem 'ruby-debug'
|
||||
# gem 'ruby-debug19', :require => 'ruby-debug'
|
||||
|
||||
# Bundle the extra gems:
|
||||
# gem 'bj'
|
||||
gem 'nokogiri'
|
||||
# gem 'sqlite3-ruby', :require => 'sqlite3'
|
||||
# gem 'aws-s3', :require => 'aws/s3'
|
||||
|
||||
# Bundle gems for the local environment. Make sure to
|
||||
# put test-only gems in this group so their generators
|
||||
# and rake tasks are available in development mode:
|
||||
# group :development, :test do
|
||||
# gem 'webrat'
|
||||
# end
|
||||
gem 'delayed_job'
|
||||
|
|
|
@ -31,6 +31,10 @@ GEM
|
|||
arel (2.0.10)
|
||||
awesome_print (0.4.0)
|
||||
builder (2.1.2)
|
||||
daemons (1.1.4)
|
||||
delayed_job (2.1.4)
|
||||
activesupport (~> 3.0)
|
||||
daemons
|
||||
erubis (2.6.6)
|
||||
abstract (>= 1.0.0)
|
||||
i18n (0.5.0)
|
||||
|
@ -40,7 +44,6 @@ GEM
|
|||
mime-types (~> 1.16)
|
||||
treetop (~> 1.4.8)
|
||||
mime-types (1.16)
|
||||
nokogiri (1.4.5)
|
||||
pg (0.11.0)
|
||||
polyglot (0.3.1)
|
||||
rack (1.2.3)
|
||||
|
@ -73,7 +76,7 @@ PLATFORMS
|
|||
|
||||
DEPENDENCIES
|
||||
awesome_print
|
||||
nokogiri
|
||||
delayed_job
|
||||
pg
|
||||
rails (= 3.0.8)
|
||||
sqlite3
|
||||
|
|
|
@ -5,14 +5,23 @@ class ArtistController < ApplicationController
|
|||
data = {}
|
||||
name = params[:name].gsub('%20', ' ').gsub('+', ' ')
|
||||
artist = Artist.find_by_name(name)
|
||||
if artist and artist.status == 0
|
||||
render :json => {status: 'loading'}
|
||||
return
|
||||
end
|
||||
unless artist
|
||||
results = ArtistController.musicBrainzExactSearch(name)
|
||||
if results.empty?
|
||||
render :json => {status: 'not founds'}
|
||||
render :json => {status: 'not found'}
|
||||
return
|
||||
elsif results[0][:name] == name
|
||||
ImportController.importArtist(name)
|
||||
render :json => {status: 'loaded'}
|
||||
# Saving artist and queueing job
|
||||
artist = Artist.new
|
||||
artist.name = name
|
||||
artist.status = 0
|
||||
artist.save
|
||||
Delayed::Job.enqueue LoadArtistJob.new(name)
|
||||
render :json => {status: 'loading_started'}
|
||||
return
|
||||
elsif results[0][:name].downcase == name.downcase or results[0][:name].downcase == 'the '+ name.downcase
|
||||
render :json => {status: 'corrected', page: results[0][:name]}
|
||||
|
|
|
@ -19,8 +19,8 @@ class ImportController < ApplicationController
|
|||
end
|
||||
|
||||
# Save artist
|
||||
artist = Artist.new
|
||||
artist.name = artist_mb_data[:name]
|
||||
artist = Artist.find_by_name(name)
|
||||
#artist.name = artist_mb_data[:name]
|
||||
artist.desc = artist_desc
|
||||
artist.pic_url = artist_pic
|
||||
artist.artist_type = artist_mb_data[:type]
|
||||
|
@ -133,6 +133,9 @@ class ImportController < ApplicationController
|
|||
|
||||
end # mb_albums.each do |mb_album|
|
||||
|
||||
artist.status = 1
|
||||
artist.save
|
||||
|
||||
end # def self.importArtist name
|
||||
|
||||
end
|
|
@ -0,0 +1 @@
|
|||
require 'load_artist_job'
|
|
@ -0,0 +1,21 @@
|
|||
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.timestamps
|
||||
end
|
||||
|
||||
add_index :delayed_jobs, [:priority, :run_at], :name => 'delayed_jobs_priority'
|
||||
end
|
||||
|
||||
def self.down
|
||||
drop_table :delayed_jobs
|
||||
end
|
||||
end
|
|
@ -0,0 +1,9 @@
|
|||
class AddStatusToArtists < ActiveRecord::Migration
|
||||
def self.up
|
||||
add_column :artists, :status, :integer
|
||||
end
|
||||
|
||||
def self.down
|
||||
remove_column :artists, :status
|
||||
end
|
||||
end
|
18
db/schema.rb
18
db/schema.rb
|
@ -10,7 +10,7 @@
|
|||
#
|
||||
# It's strongly recommended to check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema.define(:version => 20110617213912) do
|
||||
ActiveRecord::Schema.define(:version => 20110618191349) do
|
||||
|
||||
create_table "albums", :force => true do |t|
|
||||
t.string "name"
|
||||
|
@ -31,8 +31,24 @@ ActiveRecord::Schema.define(:version => 20110617213912) do
|
|||
t.string "pic_url"
|
||||
t.string "artist_type"
|
||||
t.string "mbid"
|
||||
t.integer "status"
|
||||
end
|
||||
|
||||
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.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
end
|
||||
|
||||
add_index "delayed_jobs", ["priority", "run_at"], :name => "delayed_jobs_priority"
|
||||
|
||||
create_table "tracks", :force => true do |t|
|
||||
t.string "name"
|
||||
t.integer "album_id"
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
class LoadArtistJob < Struct.new(:name)
|
||||
def perform
|
||||
ImportController.importArtist(name)
|
||||
end
|
||||
end
|
|
@ -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
|
Loading…
Reference in New Issue