16 votes

Paperclip S3 - Peut télécharger des images mais ne peut pas les visualiser

J'ai créé une application Rails fonctionnant sur Heroku, avec Paperclip et S3. J'ai réussi à télécharger des images dans mon panier S3 via le site (je peux les voir apparaître dans mon panier sur le panneau de contrôle d'Amazon).

Mais lorsque j'ajoute une balise Image, c'est-à-dire <%= image_tag x.photo.url %>, j'obtiens le code html suivant (balises omises ici), sans qu'aucune image ne soit affichée !

img alt="Test_tree" src="http://s3.amazonaws.com/hiphotos/ads/photos/000/000/015/original/test\_tree.jpg?1344661020"

Aidez-nous ! Pourquoi ne puis-je pas voir les images bien qu'elles soient dans le seau ?

Merci beaucoup les gars

18voto

Zorayr Points 2637

Créer un fichier appelé paperclip initializer :

# config/initializers/paperclip.rb 
# We are actually setting this to 's3_domain_url', 
# so it's not a placeholder for something else. 
Paperclip::Attachment.default_options[:url] = ':s3_domain_url'
Paperclip::Attachment.default_options[:path] = '/:class/:attachment/:id_partition/:style/:filename'

Vous pouvez également placer ceci à l'intérieur production.rb :

config.paperclip_defaults = {
    :storage => :s3,
    :s3_credentials => {
        :bucket => ENV['S3_BUCKET_NAME'],
        :access_key_id => ENV['AWS_ACCESS_KEY_ID'],
        :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
    },
    :url =>':s3_domain_url',
    :path => '/:class/:attachment/:id_partition/:style/:filename',
}

12voto

marflar Points 13293

Tout d'abord, l'url que vous essayez d'utiliser dans votre code est la suivante :

http://s3.amazonaws.com/hiphotos/ads/photos/000/000/015/original/test_tree.jpg

Lorsque vous visitez ce lien dans le navigateur, vous voyez ce qui suit :

<message>
  The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.
</Message>
<RequestId>810A6AE1D141304C</RequestId>
<Bucket>hiphotos</Bucket>
<HostId>
  XXZ+s+slgZLsRWy5NiU/G0yAKBLftw0oT2dDKpas532qXJEPSrISVPqfZsEgpb2J
</HostId>
<Endpoint>hiphotos.s3.amazonaws.com</Endpoint>

Donc si nous modifions l'url en utilisant le bon endpoint, nous obtenons ceci :

http://hiphotos.s3.amazonaws.com/ads/photos/000/000/015/original/test_tree.jpg

Ce qui renvoie bien l'image correcte.

Si vous utilisez des buckets européens, cela peut arriver, et cela peut être la faute de la gem que vous utilisez pour pousser les choses vers s3.

Il existe de nombreux articles sur la manière de faire fonctionner ensemble Paperclip, S3 et les buckets européens.

J'ai cependant constaté que depuis que j'ai commencé à utiliser le asset_sync gem, qui utilise Fog au lieu de aws-s3 gem, je n'ai plus de problème avec paperclip et S3.

Je pense donc que le brouillard a quelque chose à voir avec la disparition de ce problème pour moi. Je vous recommande de l'adopter si vous utilisez autre chose.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X