2013-10-13 5 views
6

J'essaie de configurer le point de terminaison renvoyé par trombone lorsque mon objet a été transféré avec succès sur le service S3 d'Amazon. Le téléchargement et tout fonctionne correctement, mais l'URL renvoyée est incorrecte pour afficher le téléchargement.Rails 4, Paperclip, Amazon S3 Config Chemin Amazon

À l'heure actuelle, l'URL renvoyée est http://s3.amazonaws.com/path/to/my/items (comme indiqué dans l'image ci-dessous).

Au lieu de s3.amazonaws.com, je voudrais la racine d'être spécifique à l'emplacement du seau (par exemple s3-us-west-1.amazonaws.com/path/to/my/items~~V~~3rd)

enter image description here

Où dois-je essayer et configurer un autre chemin d'URL (de s3.amazonaws.com à quelque chose d'autre)? J'ai essayé d'ajouter une URL avec le chemin ci-dessus dans mon fichier de configuration comme:

#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'] 

     } 

    } 

Ce qui ne semble pas avoir d'effet. S'il vous plaît conseiller sur où je devrais mettre cette option!

Merci d'avance!

+0

** Remplacer ** ': url => « https://s3-us-west-1.amazonaws.com/ "** avec **": s3_host_name => "s3-us-west-1.amazonaws.com" et vous serez bien. –

Répondre

11

Si vous utilisez S3, nous avons constaté que vous devez inclure les informations d'identification S3 dans votre modèle actuel (pas seulement les fichiers de configuration). Voici ce que nous faisons:

Modèle

#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: **** 

Espérons que cela aide?

+2

Vous pouvez également mettre la clé ': s3_host_name' dans le ** Modèle **. –

+0

Au lieu d'écrire mes informations d'identification dans chaque modèle, je devais simplement l'écrire dans config/aws.yml et cela a fonctionné. –

0

J'ai également eu le même problème lors de la migration vers Spree 2.2 et je ne suis toujours pas sûr de la façon de le résoudre correctement. Il semble que Paperclip aurait dû mettre à jour le chemin depuis la configuration, mais ce n'est pas le cas.

Faute de mieux, je l'ai surchargée la Spree :: classe image comme ceci:

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

Après quelques essais j'ai trouvé que la mise en :s3_host_name suffit globalement. J'ai fini avec le même problème parce que je mettais :s3_region, qui était utilisé par Paperclip (post-4.3.1, avec aws-sdk 2) pour stocker les pièces jointes, mais pas lors de la génération des URL.

Cela peut également intéresser les lecteurs qui se retrouvent sur ce problème: https://github.com/thoughtbot/paperclip/wiki/Restricting-Access-to-Objects-Stored-on-Amazon-S3