Class: S3Service
- Inherits:
-
Object
- Object
- S3Service
- Defined in:
- lib/httpimagestore/s3_service.rb
Instance Method Summary collapse
-
#initialize(key_id, key_secret, bucket, options = {}) ⇒ S3Service
constructor
A new instance of S3Service.
- #put_image(image_path, content_type, data) ⇒ Object
Constructor Details
#initialize(key_id, key_secret, bucket, options = {}) ⇒ S3Service
Returns a new instance of S3Service.
5 6 7 8 9 10 11 12 13 |
# File 'lib/httpimagestore/s3_service.rb', line 5 def initialize(key_id, key_secret, bucket, = {}) @options = @logger = ([:logger] or Logger.new('/dev/null')) @s3 = S3::Service.new(:access_key_id => key_id, :secret_access_key => key_secret) @logger.info "Getting bucket: #{bucket}" @bucket = @s3.buckets.find(bucket) or fail "no buckte '#{bucket}' found" end |
Instance Method Details
#put_image(image_path, content_type, data) ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/httpimagestore/s3_service.rb', line 15 def put_image(image_path, content_type, data) @logger.info "Putting image in bucket '#{@bucket.name}': #{image_path}" file = @bucket.objects.build(image_path) file.cache_control = @options[:cache_control] if @options.include?(:cache_control) and not @options[:cache_control].empty? file.content_type = content_type file.content = data RetryThis.retry_this( :times => (@options[:upload_retry_times] or 1), :sleep => (@options[:upload_retry_delay] or 0.0), :error_types => [Errno::ECONNRESET, Timeout::Error, S3::Error::RequestTimeout] ) do |attempt| @logger.warn "Retrying S3 save operation" if attempt > 1 file.save end "http://#{@bucket.name}.s3.amazonaws.com/#{image_path}" end |