Commit 62379c21
Changed files (5)
app
services
application
handlers
infrastructure
config
initializers
app/services/application/handlers/process_photo.rb
@@ -1,7 +1,8 @@
class ProcessPhoto
- def initialize(photos, exif_parser)
+ def initialize(photos, exif_parser, blob_storage = BlobStorage.new)
@photos = photos
@exif_parser = exif_parser
+ @blob_storage = blob_storage
end
def handles?(event)
@@ -11,11 +12,19 @@ class ProcessPhoto
def handle(message)
file = File.open(message[:file_path])
photo = @photos.find(message[:photo_id])
- photo.image = file
+ #photo.image = file
photo.image_processing = nil
photo.content_type = message[:content_type]
photo.original_filename = message[:original_filename]
photo.latitude, photo.longitude = @exif_parser.parse_geolocation_from(file)
+ upload_original(message[:file_path], photo)
photo.save!
end
+
+ private
+
+ def upload_original(file, photo)
+ key = "uploads/photo/image/#{photo.id}/#{File.basename(file)}"
+ @blob_storage.upload(key, file)
+ end
end
app/services/infrastructure/blob_storage.rb
@@ -0,0 +1,23 @@
+class BlobStorage
+ attr_reader :bucket_name
+
+ def initialize(bucket_name = ENV['FOG_DIRECTORY'])
+ @bucket_name = bucket_name
+ end
+
+ def upload(key, file)
+ puts "uploading to #{bucket_name}/#{key}"
+ object = connection.buckets[bucket_name].objects[key]
+ object.write(Pathname.new(file), content_type: content_type_for(file), cache_control: 'public, max-age=315576000')
+ end
+
+ private
+
+ def connection
+ @connection ||= AWS::S3.new
+ end
+
+ def content_type_for(file)
+ ::MIME::Types.type_for(file).first.to_s
+ end
+end
config/initializers/aws.rb
@@ -0,0 +1,6 @@
+AWS.config(
+ access_key_id: ENV['AWS_ACCESS_KEY_ID'],
+ secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'],
+ logger: Rails.logger,
+ log_level: :debug,
+)
Gemfile
@@ -34,6 +34,8 @@ gem 'gibbon'
gem 'twitter'
gem 'spank'
gem 'exifr'
+gem 'aws-sdk'
+gem 'mime-types'
group :development do
gem 'capistrano'
Gemfile.lock
@@ -32,6 +32,9 @@ GEM
asset_sync (1.0.0)
activemodel
fog (>= 1.8.0)
+ aws-sdk (1.42.0)
+ json (~> 1.4)
+ nokogiri (>= 1.4.4)
bcrypt (3.1.7)
bcrypt-ruby (3.1.5)
bcrypt (>= 3.1.3)
@@ -316,6 +319,7 @@ PLATFORMS
DEPENDENCIES
acts-as-taggable-on (~> 2.4.1)
asset_sync (~> 1.0.0)
+ aws-sdk
better_errors
binding_of_caller
bootstrap-sass (~> 2.3.0)
@@ -349,6 +353,7 @@ DEPENDENCIES
jquery-ui-rails (~> 4.0.0)
kaminari (~> 0.15.0)
lol_dba
+ mime-types
newrelic_rpm
pg
poltergeist