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' | gem 'rails', '3.0.8' | ||||||
| 
 | 
 | ||||||
| # Bundle edge Rails instead: |  | ||||||
| # gem 'rails', :git => 'git://github.com/rails/rails.git' |  | ||||||
| 
 |  | ||||||
| gem 'sqlite3' | gem 'sqlite3' | ||||||
| gem 'pg' | gem 'pg' | ||||||
| gem 'awesome_print', :require => 'ap' | gem 'awesome_print', :require => 'ap' | ||||||
| 
 | 
 | ||||||
| # Use unicorn as the web server | gem 'delayed_job' | ||||||
| # 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 |  | ||||||
|  | |||||||
| @ -31,6 +31,10 @@ GEM | |||||||
|     arel (2.0.10) |     arel (2.0.10) | ||||||
|     awesome_print (0.4.0) |     awesome_print (0.4.0) | ||||||
|     builder (2.1.2) |     builder (2.1.2) | ||||||
|  |     daemons (1.1.4) | ||||||
|  |     delayed_job (2.1.4) | ||||||
|  |       activesupport (~> 3.0) | ||||||
|  |       daemons | ||||||
|     erubis (2.6.6) |     erubis (2.6.6) | ||||||
|       abstract (>= 1.0.0) |       abstract (>= 1.0.0) | ||||||
|     i18n (0.5.0) |     i18n (0.5.0) | ||||||
| @ -40,7 +44,6 @@ GEM | |||||||
|       mime-types (~> 1.16) |       mime-types (~> 1.16) | ||||||
|       treetop (~> 1.4.8) |       treetop (~> 1.4.8) | ||||||
|     mime-types (1.16) |     mime-types (1.16) | ||||||
|     nokogiri (1.4.5) |  | ||||||
|     pg (0.11.0) |     pg (0.11.0) | ||||||
|     polyglot (0.3.1) |     polyglot (0.3.1) | ||||||
|     rack (1.2.3) |     rack (1.2.3) | ||||||
| @ -73,7 +76,7 @@ PLATFORMS | |||||||
| 
 | 
 | ||||||
| DEPENDENCIES | DEPENDENCIES | ||||||
|   awesome_print |   awesome_print | ||||||
|   nokogiri |   delayed_job | ||||||
|   pg |   pg | ||||||
|   rails (= 3.0.8) |   rails (= 3.0.8) | ||||||
|   sqlite3 |   sqlite3 | ||||||
|  | |||||||
| @ -5,14 +5,23 @@ class ArtistController < ApplicationController | |||||||
|     data = {} |     data = {} | ||||||
|     name = params[:name].gsub('%20', ' ').gsub('+', ' ') |     name = params[:name].gsub('%20', ' ').gsub('+', ' ') | ||||||
|     artist = Artist.find_by_name(name) |     artist = Artist.find_by_name(name) | ||||||
|  |     if artist and artist.status == 0 | ||||||
|  |       render :json => {status: 'loading'} | ||||||
|  |       return | ||||||
|  |     end | ||||||
|     unless artist |     unless artist | ||||||
|       results = ArtistController.musicBrainzExactSearch(name) |       results = ArtistController.musicBrainzExactSearch(name) | ||||||
|       if results.empty? |       if results.empty? | ||||||
|         render :json => {status: 'not founds'} |         render :json => {status: 'not found'} | ||||||
|         return |         return | ||||||
|       elsif results[0][:name] == name |       elsif results[0][:name] == name | ||||||
|         ImportController.importArtist(name) |         # Saving artist and queueing job | ||||||
|         render :json => {status: 'loaded'} |         artist = Artist.new | ||||||
|  |         artist.name = name | ||||||
|  |         artist.status = 0 | ||||||
|  |         artist.save | ||||||
|  |         Delayed::Job.enqueue LoadArtistJob.new(name) | ||||||
|  |         render :json => {status: 'loading_started'} | ||||||
|         return |         return | ||||||
|       elsif results[0][:name].downcase == name.downcase or results[0][:name].downcase == 'the '+ name.downcase |       elsif results[0][:name].downcase == name.downcase or results[0][:name].downcase == 'the '+ name.downcase | ||||||
|         render :json => {status: 'corrected', page: results[0][:name]} |         render :json => {status: 'corrected', page: results[0][:name]} | ||||||
|  | |||||||
| @ -19,8 +19,8 @@ class ImportController < ApplicationController | |||||||
|     end |     end | ||||||
|      |      | ||||||
|     # Save artist |     # Save artist | ||||||
|     artist = Artist.new |     artist = Artist.find_by_name(name) | ||||||
|     artist.name = artist_mb_data[:name] |     #artist.name = artist_mb_data[:name] | ||||||
|     artist.desc = artist_desc |     artist.desc = artist_desc | ||||||
|     artist.pic_url = artist_pic |     artist.pic_url = artist_pic | ||||||
|     artist.artist_type = artist_mb_data[:type] |     artist.artist_type = artist_mb_data[:type] | ||||||
| @ -133,6 +133,9 @@ class ImportController < ApplicationController | |||||||
|        |        | ||||||
|     end # mb_albums.each do |mb_album| |     end # mb_albums.each do |mb_album| | ||||||
|      |      | ||||||
|  |     artist.status = 1 | ||||||
|  |     artist.save | ||||||
|  |      | ||||||
|   end # def self.importArtist name |   end # def self.importArtist name | ||||||
|    |    | ||||||
| end | end | ||||||
							
								
								
									
										1
									
								
								config/initializers/delayed_job.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								config/initializers/delayed_job.rb
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | |||||||
|  | require 'load_artist_job' | ||||||
							
								
								
									
										21
									
								
								db/migrate/20110618191148_create_delayed_jobs.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								db/migrate/20110618191148_create_delayed_jobs.rb
									
									
									
									
									
										Normal file
									
								
							| @ -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 | ||||||
							
								
								
									
										9
									
								
								db/migrate/20110618191349_add_status_to_artists.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								db/migrate/20110618191349_add_status_to_artists.rb
									
									
									
									
									
										Normal file
									
								
							| @ -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. | # 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| |   create_table "albums", :force => true do |t| | ||||||
|     t.string   "name" |     t.string   "name" | ||||||
| @ -31,8 +31,24 @@ ActiveRecord::Schema.define(:version => 20110617213912) do | |||||||
|     t.string   "pic_url" |     t.string   "pic_url" | ||||||
|     t.string   "artist_type" |     t.string   "artist_type" | ||||||
|     t.string   "mbid" |     t.string   "mbid" | ||||||
|  |     t.integer  "status" | ||||||
|   end |   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| |   create_table "tracks", :force => true do |t| | ||||||
|     t.string   "name" |     t.string   "name" | ||||||
|     t.integer  "album_id" |     t.integer  "album_id" | ||||||
|  | |||||||
							
								
								
									
										5
									
								
								lib/load_artist_job.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								lib/load_artist_job.rb
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,5 @@ | |||||||
|  | class LoadArtistJob < Struct.new(:name) | ||||||
|  |   def perform | ||||||
|  |     ImportController.importArtist(name) | ||||||
|  |   end | ||||||
|  | end | ||||||
							
								
								
									
										5
									
								
								script/delayed_job
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										5
									
								
								script/delayed_job
									
									
									
									
									
										Executable file
									
								
							| @ -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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user