2010-07-01 14 views
12

Mi piacerebbe leggere la geometria di una foto dal mio contenitore S3.La graffetta può leggere la geometria della foto da un secchio S3?

Quando è acceso il mio locale, questo funziona:

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

Ma non sembra funzionare quando passo il mio modello verso S3 .. Tutti i consigli?

La storia più grande, sto cercando di scrivere del codice che mi consenta di recuperare le foto da S3, consentire agli utenti di ritagliarle e quindi ricaricarle nuovamente su S3 ancora assegnato da paperclip.

EDIT:

Questo è l'errore che viene restituito:

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 

risposta

14

Se stai usando S3 come un meccanismo di archiviazione, non è possibile utilizzare il metodo di geometria sopra (assume una locale file). Paperclip può convertire da file di S3 a tempfile locale con la Paperclip::Geometry.from_file:

Ecco il mio codice aggiornato:

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

#to_file è stato rimosso in graffetta 3.0. 1. In questa e nelle versioni successive, usa 'Paperclip :: Geometry.from_file (Paperclip.io_adapters.for (photo.styles [stile]))' –

+2

@IsaacBetesh Questo non funziona per me. Ottengo il seguente errore: 'Percorso Paperclip :: AbstractAdapter # delegato a @ tempfile.path, ma @tempfile è nil: Paperclip :: NilAdapter'. A proposito, sto usando s3 con la gemma della nebbia. – npouillard

+0

Sto usando S3 direttamente (ad es. Aws-sdk gem) quindi non posso dire nulla di preciso sulla nebbia, ma la traccia dello stack probabilmente conterrà alcuni indizi. –

10

Questo funziona per s3 e locale

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 
Problemi correlati