2013-10-13 12 views
6

Sto provando a configurare l'endpoint che viene restituito da paperclip quando il mio oggetto viene caricato con successo nel servizio S3 di Amazon. Il caricamento e tutto funziona correttamente, ma l'URL che viene restituito non è corretto per la visualizzazione del caricamento.Rails 4, Paperclip, Amazon S3 Config Amazon Path

In questo momento, l'URL che viene restituito è http://s3.amazonaws.com/path/to/my/items (come si vede nella figura qui sotto).

Invece di s3.amazonaws.com, vorrei la radice per essere specifico per la posizione del secchio (ad es s3-us-west-1.amazonaws.com/path/to/my/items~~V~~3rd)

enter image description here

Dove devo provare e configurare un percorso URL diverso (da s3.amazonaws.com a qualcos'altro)? Ho provato ad aggiungere un URL con il percorso precedente nel mio file di configurazione come:

#Paperclip Amazon S3 
    config.paperclip_defaults = { 
     :storage => :s3, 
     :url => "https://s3-us-west-1.amazonaws.com/", 
     :s3_credentials => { 
      :bucket => ENV['S3_BUCKET_NAME'], 
      :access_key_id => ENV['AWS_ACCESS_KEY_ID'], 
      :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'] 

     } 

    } 

che non sembra avere alcun effetto. Si prega di avvisare su dove dovrei impostare questa opzione!

Grazie in anticipo!

+0

** ** Sostituire ': url => "https://s3-us-west-1.amazonaws.com/ "' ** with ** ': s3_host_name => 's3-us-west-1.amazonaws.com' e starai bene. –

risposta

11

Se si utilizza S3, è stato rilevato che è necessario includere le credenziali S3 nel modello attuale (non solo i file di configurazione). Ecco cosa facciamo:

Modello

#Image Upload 
Paperclip.options[:command_path] = 'C:\RailsInstaller\ImageMagick' 
has_attached_file :image, 
     :styles => { :medium => "x300", :thumb => "x100" }, 
     :default_url => "****", 
     :storage => :s3, 
     :bucket => '****', 
     :s3_credentials => S3_CREDENTIALS, 
      :url => "/:image/:id/:style/:basename.:extension", 
      :path => ":image/:id/:style/:basename.:extension" 

config/application.rb

# Paperclip (for Amazon) (we use EU servers) 
    config.paperclip_defaults = { 
    :storage => :s3, 
    :s3_host_name => 's3-eu-west-1.amazonaws.com' 
    } 

config/s3.yml

#Amazon AWS Config 
development: 
    access_key_id: ********** 
    secret_access_key: ************** 
    bucket: **** 

production: 
    access_key_id: *********** 
    secret_access_key: *********** 
    bucket: **** 

Spero che questo aiuti?

+2

Puoi anche inserire la chiave ': s3_host_name' nel ** Modello **. –

+0

Invece di scrivere le credenziali in ogni modello, ho dovuto solo scriverlo in config/aws.yml e ha funzionato. –

0

Ho anche avuto lo stesso problema durante la migrazione a Spree 2.2 e non sono ancora sicuro su come risolverlo nel modo corretto. Sembra che Paperclip avrebbe dovuto aggiornare il percorso dalla configurazione, ma non lo è.

mancanza di una soluzione migliore, ho sovrascritti classe Sprea :: immagine in questo modo:

1 Spree::Image.class_eval do 
2 has_attached_file :attachment, 
3  styles: { mini: '48x48>', small: '100x100>', product: '240x240>', large: '600x600>' }, 
4  default_style: :product, 
5  url: '/spree/products/:id/:style/:basename.:extension', 
6  path: 'products/:id/:style/:basename.:extension', 
7  convert_options: { all: '-strip -auto-orient -colorspace sRGB' }· 
8 end 
0

Dopo alcuni esperimenti ho trovato che l'impostazione :s3_host_name sufficiente a livello globale. Ho finito con lo stesso problema perché stavo impostando :s3_region, che era utilizzato da Paperclip (post-4.3.1, con aws-sdk 2) per la memorizzazione degli allegati, ma non durante la generazione degli URL.

Questo può anche essere di interesse per i lettori che finiscono su questo problema: https://github.com/thoughtbot/paperclip/wiki/Restricting-Access-to-Objects-Stored-on-Amazon-S3