Is it possible to configure Paperclip to produce HTTPS urls for S3?

Ruby on-RailsRuby on-Rails-3Amazon S3Paperclip

Ruby on-Rails Problem Overview


I'm using Paperclip to manage user-uploaded images on a site that is served entirely under HTTPS. In order to avoid the silly security warnings on IE7/IE8, I need to also serve these images over SSL. I typically render my images using something like the following:

<%= image_tag @product.image.url(:large) %>

where

class Product < ActiveRecord::Base

  has_attached_file :image,
                  :styles => {
                      :large => {:geometry => "616x450#"}
                  },
                  :storage => :s3,
                  :s3_credentials => {:access_key_id => "xxx", :secret_access_key => "xxx"},
                  :path => ":attachment/:id/:style/:basename.:extension",
                  :bucket => CONFIG['s3_media_bucket'],
                  :default_url => "/assets/image_missing.png"

and the image URL produced is something like:

http://s3.amazonaws.com/media.example.com/images/6/large/image123.JPG

Is there a magic Paperclip option to change this to:

https://s3.amazonaws.com/media.example.com/images/6/large/image123.JPG

Ruby on-Rails Solutions


Solution 1 - Ruby on-Rails

You simply need to add:

:s3_protocol => :https

This is covered in the documentation.

> There are a few S3-specific options for has_attached_file:
> ...
> > * s3_protocol: The protocol for the URLs generated to your S3 assets. Can be either ‘http’ or ‘https’. Defaults to ‘http’ when your :s3_permissions are :public_read (the default), and ‘https’ when your :s3_permissions are anything else.

Solution 2 - Ruby on-Rails

To update your code just say, add the :s3_protocol as following:

class Product < ActiveRecord::Base
has_attached_file :image,
              :styles => {
                  :large => {:geometry => "616x450#"}
              },
              :storage => :s3,
              :s3_credentials => {:access_key_id => "xxx", :secret_access_key => "xxx"},
              :s3_protocol => :https,
              :path => ":attachment/:id/:style/:basename.:extension",
              :bucket => CONFIG['s3_media_bucket'],
              :default_url => "/assets/image_missing.png"

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestioncailinanneView Question on Stackoverflow
Solution 1 - Ruby on-RailsJordan RunningView Answer on Stackoverflow
Solution 2 - Ruby on-Railsuser2397178View Answer on Stackoverflow