2011-10-26 1 views
52

Sto utilizzando Paperclip per gestire le immagini caricate dall'utente su un sito che viene servito interamente in HTTPS. Al fine di evitare gli stupidi avvisi di sicurezza su IE7/IE8, ho anche bisogno di servire queste immagini su SSL. Io di solito rendo mie immagini usando qualcosa come il seguente:È possibile configurare Paperclip per produrre gli URL HTTPS?

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

dove

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" 

e l'URL dell'immagine prodotta è qualcosa di simile:

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

C'è un'opzione Paperclip magica per cambiare questo a:

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

risposta

93

Hai semplicemente bisogno di aggiungere:

:s3_protocol => :https 

Questa è coperto in the documentation.

Ci sono alcune opzioni S3-specifici per has_attached_file:
...

  • s3_protocol: Il protocollo per gli URL generati per i vostri beni S3. Può essere "http" o "https". Il valore predefinito è 'http' quando: s3_permissions sono: public_read (il valore predefinito) e 'https' quando your: s3_permissions sono qualsiasi altra cosa.
+2

@JoshPinter se ho caricato immagini tramite graffetta già e voglio aggiungere https per l'url, come direbbe paperclip che? C'è un'opzione dove non devo caricare di nuovo tutte le mie immagini. – Moosa

+1

@Moosa Non dovresti ricaricarli se stai semplicemente cambiando il protocollo per usare 'https'. Dovrebbe funzionare. Provalo e fammi sapere. –

+1

@JoshPinter L'ho provato ma non funziona: il codice has_attached non viene chiamato solo durante gli upload? se sì, come funziona su immagini esistenti? Tuttavia, anche i nuovi caricamenti non puntano a https. Su S3, l'URL immagine viene visualizzato come https ma il mio sito lo mostra come http. Non so perché. www.outfitadditions.com. – Moosa

22

aggiornare il codice solo dire, aggiungere il: s3_protocol come segue:

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"