2010-07-01 3 views
12

Je voudrais lire la géométrie d'une photo de mon conteneur S3.Un trombone peut-il lire la photo géométrie d'un godet S3?

Quand il est sur mon local, cela fonctionne:

def photo_geometry(style = :original) 
    @geometry ||= {} 
    @geometry[style] ||= Paperclip::Geometry.from_file photo.path(style) 
end 

Mais il ne semble pas fonctionner quand je passe mon modèle sur S3 .. Toutes les recommandations?

La plus grande histoire, est que j'essaye d'écrire du code qui me permettra de récupérer des photos de S3, permettre aux utilisateurs de les recadrer, puis de les réinstaller en S3 toujours assigné par un trombone.

EDIT:

C'est l'erreur qui est renvoyée:

Paperclip::NotIdentifiedByImageMagickError: photos/199/orig/greatReads.png is not recognized by the 'identify' command. 
from /Users/daniellevine/Sites/hq_channel/vendor/gems/thoughtbot-paperclip-2.3.1/lib/paperclip/geometry.rb:24:in `from_file' 
from /Users/daniellevine/Sites/hq_channel/app/models/photo.rb:68:in `photo_geometry' 
from (irb):1 

Répondre

14

Si vous utilisez S3 comme un mécanisme de stockage, vous ne pouvez pas utiliser la méthode de la géométrie ci-dessus (assume une locale fichier). Paperclip peut convertir un fichier S3 à tempfile local avec le Paperclip::Geometry.from_file:

Voici mon code mis à jour:

def photo_geometry(style = :original) 
    @geometry ||= {} 
    @geometry[style] ||= Paperclip::Geometry.from_file(photo.to_file(style)) 
end 
+2

#to_file a été enlevé à 3.0 paperclip. 1. Dans ce et versions ultérieures, utilisez 'Paperclip :: Geometry.from_file (Paperclip.io_adapters.for (photo.styles [style]))' –

+2

@IsaacBetesh Cela ne fonctionne pas pour moi. J'obtiens l'erreur suivante: 'Paperclip :: AbstractAdapter # path est délégué à @ tempfile.path, mais @tempfile est nul: Paperclip :: NilAdapter'. Pour info, j'utilise s3 avec la gemme de brouillard. – npouillard

+0

J'utilise S3 directement (c'est-à-dire aws-sdk gem) donc je ne peux rien dire de précis sur le brouillard, mais votre trace de pile contiendra probablement quelques indices. –

10

Cela fonctionne pour s3 et local

def photo_geometry(style = :original) 
    @geometry ||= {} 
    photo_path = (photo.options[:storage] == :s3) ? photo.url(style) : photo.path(style) 
    @geometry[style] ||= Paperclip::Geometry.from_file(photo_path) 
end 
Questions connexes