From f6d957a25c007a1ab6de2144ee110d8b1d905dcb Mon Sep 17 00:00:00 2001 From: Tyrel Souza Date: Thu, 29 May 2014 13:27:02 -0400 Subject: [PATCH 1/6] downloading file from vidpush to local box. --- Gemfile | 4 ++++ Gemfile.lock | 21 +++++++++++++++++++++ app/controllers/videolistings_controller.rb | 6 ++++++ app/models/amazon_copy.rb | 20 ++++++++++++++++++++ config.ru | 2 +- config/environment.rb | 2 ++ config/routes.rb | 2 ++ 7 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 app/models/amazon_copy.rb diff --git a/Gemfile b/Gemfile index 90c7c74..8cdb31e 100644 --- a/Gemfile +++ b/Gemfile @@ -5,6 +5,8 @@ ruby '2.1.0' gem 'airbrake' gem 'coffee-rails' gem 'delayed_job_active_record', '>= 4.0.0' +gem 'delayed_job_web' +gem 'daemons' gem 'email_validator' gem 'flutie' gem 'high_voltage' @@ -27,6 +29,8 @@ gem 'zeroclipboard-rails' gem 'annotate', :git => 'git://github.com/ctran/annotate_models.git' gem 'asset_sync' gem 'angularjs-rails' +gem 'undertaker' # Thanks Brian +gem 'httparty' group :development do gem 'foreman' diff --git a/Gemfile.lock b/Gemfile.lock index 5791661..c93f421 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -90,6 +90,7 @@ GEM coffee-script-source (1.7.0) crack (0.4.2) safe_yaml (~> 1.0.0) + daemons (1.1.9) database_cleaner (1.2.0) debug_inspector (0.0.2) delayed_job (4.0.1) @@ -97,6 +98,10 @@ GEM delayed_job_active_record (4.0.1) activerecord (>= 3.0, < 4.2) delayed_job (>= 3.0, < 4.1) + delayed_job_web (1.2.9) + activerecord (> 3.0.0) + delayed_job (> 2.0.3) + sinatra (>= 1.4.4) devise (3.2.4) bcrypt (~> 3.0) orm_adapter (~> 0.1) @@ -143,6 +148,9 @@ GEM formatador (0.2.4) high_voltage (2.1.0) hike (1.2.3) + httparty (0.13.1) + json (~> 1.8) + multi_xml (>= 0.5.2) i18n (0.6.9) jbuilder (2.0.6) activesupport (>= 3.0.0, < 5) @@ -162,6 +170,7 @@ GEM mini_portile (0.5.3) minitest (5.3.3) multi_json (1.9.3) + multi_xml (0.5.5) net-scp (1.2.1) net-ssh (>= 2.6.5) net-ssh (2.9.0) @@ -206,6 +215,9 @@ GEM rake (10.3.1) recipient_interceptor (0.1.2) mail + redis (3.0.7) + redis-namespace (1.4.1) + redis (~> 3.0.4) rspec-core (2.14.8) rspec-expectations (2.14.5) diff-lcs (>= 1.1.3, < 2.0) @@ -248,6 +260,7 @@ GEM actionpack (>= 3.0) activesupport (>= 3.0) sprockets (~> 2.8) + terminal-table (1.4.5) thor (0.19.1) thread_safe (0.3.3) tilt (1.4.1) @@ -263,6 +276,10 @@ GEM uglifier (2.5.0) execjs (>= 0.3.0) json (>= 1.8.0) + undertaker (0.1.0) + json (>= 1.4.6) + redis-namespace (>= 0.10.0) + terminal-table (>= 1.4.2) unicorn (4.8.2) kgio (~> 2.6) rack @@ -293,8 +310,10 @@ DEPENDENCIES capybara-webkit (>= 1.0.0) cocoon! coffee-rails + daemons database_cleaner delayed_job_active_record (>= 4.0.0) + delayed_job_web devise dotenv-rails email_validator @@ -302,6 +321,7 @@ DEPENDENCIES flutie foreman high_voltage + httparty jbuilder jquery-rails launchy @@ -322,6 +342,7 @@ DEPENDENCIES timecop title uglifier + undertaker unicorn webmock zeroclipboard-rails diff --git a/app/controllers/videolistings_controller.rb b/app/controllers/videolistings_controller.rb index e5874f2..b067617 100644 --- a/app/controllers/videolistings_controller.rb +++ b/app/controllers/videolistings_controller.rb @@ -9,12 +9,18 @@ class VideolistingsController < ApplicationController @videolisting.published = true @videolisting.save @message = "Campaign Published Successfully." + + download_video @videolisting else @message = "Error: Campaign Not Published." end end + + + + def show @videolisting end diff --git a/app/models/amazon_copy.rb b/app/models/amazon_copy.rb new file mode 100644 index 0000000..c30b18d --- /dev/null +++ b/app/models/amazon_copy.rb @@ -0,0 +1,20 @@ +require 'httparty' +require 'tempfile' + +class AmazonCopy + def download_video videolisting + + file = Tempfile.new ["video_",".mp4"], "#{Rails.root}/tmp" + begin + file.write HTTParty.get(videolisting.get_video_url).parsed_response.force_encoding("utf-8") + file.flush + ensure + file.close + end + + + file.unlink + + end + handle_asynchronously :download_video +end \ No newline at end of file diff --git a/config.ru b/config.ru index 5bc2a61..c7d79bd 100644 --- a/config.ru +++ b/config.ru @@ -1,4 +1,4 @@ # This file is used by Rack-based servers to start the application. require ::File.expand_path('../config/environment', __FILE__) -run Rails.application +run Rails.application \ No newline at end of file diff --git a/config/environment.rb b/config/environment.rb index ed437e9..1e1b810 100644 --- a/config/environment.rb +++ b/config/environment.rb @@ -1,6 +1,8 @@ # Load the Rails application. require File.expand_path('../application', __FILE__) +Encoding.default_external = Encoding::UTF_8 +Encoding.default_internal = Encoding::UTF_8 # Initialize the Rails application. Vidpush::Application.initialize! diff --git a/config/routes.rb b/config/routes.rb index 242f49c..02fb50f 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -13,4 +13,6 @@ Vidpush::Application.routes.draw do end end end + + match "/djweb" => DelayedJobWeb, :anchor => false, via: [:get, :post] end From 8aa6b5ac144a49849b9c86c9ab64b445cc3391cf Mon Sep 17 00:00:00 2001 From: Tyrel Souza Date: Thu, 29 May 2014 13:56:37 -0400 Subject: [PATCH 2/6] uploads to s3 --- Gemfile | 1 + Gemfile.lock | 4 ++++ app/models/amazon_copy.rb | 13 ++++++++----- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/Gemfile b/Gemfile index 8cdb31e..dd12399 100644 --- a/Gemfile +++ b/Gemfile @@ -31,6 +31,7 @@ gem 'asset_sync' gem 'angularjs-rails' gem 'undertaker' # Thanks Brian gem 'httparty' +gem 'aws-sdk' group :development do gem 'foreman' diff --git a/Gemfile.lock b/Gemfile.lock index c93f421..5e259f2 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -60,6 +60,9 @@ GEM activemodel fog (>= 1.8.0) awesome_print (1.2.0) + aws-sdk (1.41.0) + json (~> 1.4) + nokogiri (>= 1.4.4) bcrypt (3.1.7) better_errors (1.1.0) coderay (>= 1.0.0) @@ -303,6 +306,7 @@ DEPENDENCIES annotate! asset_sync awesome_print + aws-sdk better_errors binding_of_caller bootstrap-sass (< 3.1) diff --git a/app/models/amazon_copy.rb b/app/models/amazon_copy.rb index c30b18d..0e922ce 100644 --- a/app/models/amazon_copy.rb +++ b/app/models/amazon_copy.rb @@ -3,18 +3,21 @@ require 'tempfile' class AmazonCopy def download_video videolisting - file = Tempfile.new ["video_",".mp4"], "#{Rails.root}/tmp" begin file.write HTTParty.get(videolisting.get_video_url).parsed_response.force_encoding("utf-8") file.flush + puts "File #{videolisting.videocode} downloaded." + + s3 = AWS::S3.new + obj = s3.buckets['digitalmarketingvideos'].objects["#{videolisting.videocode}.mp4"] + obj.write(file) + puts "File #{videolisting.videocode} uploaded." + ensure file.close + file.unlink end - - - file.unlink - end handle_asynchronously :download_video end \ No newline at end of file From 784b083c05604b1b646e43d9f35eb8f2e206f0a0 Mon Sep 17 00:00:00 2001 From: Tyrel Souza Date: Thu, 29 May 2014 14:04:39 -0400 Subject: [PATCH 3/6] adding prefix to video --- app/models/amazon_copy.rb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/models/amazon_copy.rb b/app/models/amazon_copy.rb index 0e922ce..0d72ef3 100644 --- a/app/models/amazon_copy.rb +++ b/app/models/amazon_copy.rb @@ -10,10 +10,9 @@ class AmazonCopy puts "File #{videolisting.videocode} downloaded." s3 = AWS::S3.new - obj = s3.buckets['digitalmarketingvideos'].objects["#{videolisting.videocode}.mp4"] + obj = s3.buckets['digitalmarketingvideos'].objects["bvideos/#{videolisting.videocode}.mp4"] obj.write(file) puts "File #{videolisting.videocode} uploaded." - ensure file.close file.unlink From eda5c25af2ecb9567a90aa252a629e94eefa5762 Mon Sep 17 00:00:00 2001 From: Tyrel Souza Date: Thu, 29 May 2014 14:34:52 -0400 Subject: [PATCH 4/6] added preview video on s3 --- app/models/amazon_copy.rb | 22 ++++++++++++++++++- app/models/videolisting.rb | 12 ++++++++-- app/views/videolistings/show.html.erb | 2 +- ...0140529180650_add_on_s3_to_videolisting.rb | 5 +++++ db/schema.rb | 3 ++- 5 files changed, 39 insertions(+), 5 deletions(-) create mode 100644 db/migrate/20140529180650_add_on_s3_to_videolisting.rb diff --git a/app/models/amazon_copy.rb b/app/models/amazon_copy.rb index 0d72ef3..29c004b 100644 --- a/app/models/amazon_copy.rb +++ b/app/models/amazon_copy.rb @@ -10,13 +10,33 @@ class AmazonCopy puts "File #{videolisting.videocode} downloaded." s3 = AWS::S3.new - obj = s3.buckets['digitalmarketingvideos'].objects["bvideos/#{videolisting.videocode}.mp4"] + obj = s3.buckets[ENV['VIDEO_BUCKET']].objects["bvideos/#{videolisting.videocode}.mp4"] obj.write(file) puts "File #{videolisting.videocode} uploaded." + ensure file.close file.unlink end + + file = Tempfile.new ["video_",".jpg"], "#{Rails.root}/tmp" + begin + file.write HTTParty.get(videolisting.get_preview_url).parsed_response.force_encoding("utf-8") + file.flush + puts "File #{videolisting.videocode} preview downloaded." + + s3 = AWS::S3.new + obj = s3.buckets[ENV['VIDEO_BUCKET']].objects["bvideos_previews/#{videolisting.videocode}.jpg"] + obj.write(file) + puts "File #{videolisting.videocode} preview uploaded." + + ensure + file.close + file.unlink + end + videolisting.on_s3 = true + videolisting.save + end handle_asynchronously :download_video end \ No newline at end of file diff --git a/app/models/videolisting.rb b/app/models/videolisting.rb index 5ac6601..19b3d75 100644 --- a/app/models/videolisting.rb +++ b/app/models/videolisting.rb @@ -9,11 +9,19 @@ class Videolisting < ActiveRecord::Base after_initialize :set_defaults def get_video_url - "http://video2.bettervideo.com/video/pro/MP4640x360/720.#{videocode}.mp4" + if on_s3 + "http://s3.amazonaws.com/#{ENV['VIDEO_BUCKET']}/bvideos/#{videocode}.mp4" + else + "http://video2.bettervideo.com/video/pro/MP4640x360/720.#{videocode}.mp4" + end end def get_preview_url - "http://video2.bettervideo.com/video/pro/jpg640x360/720.#{videocode}.jpg" + if on_s3 + "http://s3.amazonaws.com/#{ENV['VIDEO_BUCKET']}/bvideos_preview/#{videocode}.jpg" + else + "http://video2.bettervideo.com/video/pro/jpg640x360/720.#{videocode}.jpg" + end end def asseturls_array diff --git a/app/views/videolistings/show.html.erb b/app/views/videolistings/show.html.erb index 90a3fd3..d926394 100644 --- a/app/views/videolistings/show.html.erb +++ b/app/views/videolistings/show.html.erb @@ -25,7 +25,7 @@
diff --git a/db/migrate/20140529180650_add_on_s3_to_videolisting.rb b/db/migrate/20140529180650_add_on_s3_to_videolisting.rb new file mode 100644 index 0000000..9d1f3ec --- /dev/null +++ b/db/migrate/20140529180650_add_on_s3_to_videolisting.rb @@ -0,0 +1,5 @@ +class AddOnS3ToVideolisting < ActiveRecord::Migration + def change + add_column :videolistings, :on_s3, :boolean, default: nil + end +end diff --git a/db/schema.rb b/db/schema.rb index 9db59ab..f7d7242 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20140505153412) do +ActiveRecord::Schema.define(version: 20140529180650) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -113,6 +113,7 @@ ActiveRecord::Schema.define(version: 20140505153412) do t.integer "campaign_id" t.string "toneofvideo" t.boolean "published" + t.boolean "on_s3" end end From 77adf1762243927c1d726e75bb16baa0a92c0b90 Mon Sep 17 00:00:00 2001 From: Tyrel Souza Date: Thu, 29 May 2014 14:53:10 -0400 Subject: [PATCH 5/6] refactor --- app/models/amazon_copy.rb | 58 +++++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 30 deletions(-) diff --git a/app/models/amazon_copy.rb b/app/models/amazon_copy.rb index 29c004b..54de682 100644 --- a/app/models/amazon_copy.rb +++ b/app/models/amazon_copy.rb @@ -3,40 +3,38 @@ require 'tempfile' class AmazonCopy def download_video videolisting - file = Tempfile.new ["video_",".mp4"], "#{Rails.root}/tmp" - begin - file.write HTTParty.get(videolisting.get_video_url).parsed_response.force_encoding("utf-8") - file.flush - puts "File #{videolisting.videocode} downloaded." + if not videolisting.on_s3 + download_file_and_upload_to_s3 videolisting.get_video_url, + videolisting.videocode, + "mp4", + "bvideos" - s3 = AWS::S3.new - obj = s3.buckets[ENV['VIDEO_BUCKET']].objects["bvideos/#{videolisting.videocode}.mp4"] - obj.write(file) - puts "File #{videolisting.videocode} uploaded." + download_file_and_upload_to_s3 videolisting.get_preview_url, + videolisting.videocode, + "mp4", + "bvideos_preview" - ensure - file.close - file.unlink + videolisting.on_s3 = true + videolisting.save end - file = Tempfile.new ["video_",".jpg"], "#{Rails.root}/tmp" - begin - file.write HTTParty.get(videolisting.get_preview_url).parsed_response.force_encoding("utf-8") - file.flush - puts "File #{videolisting.videocode} preview downloaded." - - s3 = AWS::S3.new - obj = s3.buckets[ENV['VIDEO_BUCKET']].objects["bvideos_previews/#{videolisting.videocode}.jpg"] - obj.write(file) - puts "File #{videolisting.videocode} preview uploaded." - - ensure - file.close - file.unlink - end - videolisting.on_s3 = true - videolisting.save - end + + def download_file_and_upload_to_s3 url, videocode, extension, prefix + file = Tempfile.new ["video_", ".#{extension}"], "#{Rails.root}/tmp" + begin + file.write HTTParty.get(url).parsed_response.force_encoding("utf-8") + file.flush + + s3 = AWS::S3.new + obj = s3.buckets[ENV['VIDEO_BUCKET']].objects["#{prefix}/#{videocode}.mp4"] + obj.write(file) + + ensure + file.close + file.unlink + end + end + handle_asynchronously :download_video end \ No newline at end of file From ab3b68904595efe64126161b75b7da633bd8a692 Mon Sep 17 00:00:00 2001 From: Tyrel Souza Date: Thu, 29 May 2014 16:44:23 -0400 Subject: [PATCH 6/6] move line to proper place --- app/models/amazon_copy.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/models/amazon_copy.rb b/app/models/amazon_copy.rb index 54de682..4e53e49 100644 --- a/app/models/amazon_copy.rb +++ b/app/models/amazon_copy.rb @@ -17,8 +17,9 @@ class AmazonCopy videolisting.on_s3 = true videolisting.save end - end + handle_asynchronously :download_video + def download_file_and_upload_to_s3 url, videocode, extension, prefix file = Tempfile.new ["video_", ".#{extension}"], "#{Rails.root}/tmp" @@ -36,5 +37,4 @@ class AmazonCopy end end - handle_asynchronously :download_video end \ No newline at end of file