Может ли скрепка читать геометрию фотографий с ведра S3?

Я хотел бы прочитать геометрию фотографии с моего контейнера S3.

Когда это на моем локальном компьютере, это работает:

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

Но, похоже, это не работает, когда я переключаю свою модель на S3. Любые рекомендации?

Более крупная история заключается в том, что я пытаюсь написать некоторый код, который позволит мне извлекать фотографии из S3, позволять пользователям обрезать их, а затем повторно загружать их обратно в S3, все еще назначенные скрепкой.

РЕДАКТИРОВАТЬ:

Это ошибка, которая возвращается:

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

person Trip    schedule 01.07.2010    source источник


Ответы (3)


Если вы используете S3 в качестве механизма хранения, вы не можете использовать описанный выше метод геометрии (он предполагает локальный файл). Paperclip может преобразовать файл S3 в локальный TempFile с помощью Paperclip::Geometry.from_file:

Вот мой обновленный код:

def photo_geometry(style = :original)
  @geometry ||= {}
  @geometry[style] ||= Paperclip::Geometry.from_file(photo.to_file(style))
end
person Trip    schedule 01.07.2010
comment
#to_file был удален в скрепке 3.0.1. В этой и более поздних версиях используйте Paperclip::Geometry.from_file(Paperclip.io_adapters.for(photo.styles[style])) - person Isaac Betesh; 23.09.2014
comment
@IsaacBetesh Это не работает для меня. Я получаю следующую ошибку: Paperclip::AbstractAdapter#path delegated to @tempfile.path, but @tempfile is nil: Paperclip::NilAdapter. К вашему сведению, я использую s3 с драгоценным камнем тумана. - person npouillard; 18.11.2014
comment
Я использую S3 напрямую (то есть гем aws-sdk), поэтому не могу сказать ничего определенного о тумане, но ваша трассировка стека, вероятно, будет содержать некоторые подсказки. - person Isaac Betesh; 19.11.2014

Это работает для s3 и локального

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
person Pavan Kumar Sunkara    schedule 27.06.2011

У меня была более или менее точно такая же проблема, но ни один из ответов здесь не помог мне, но это сработало:

# helper method used by the cropper view to get the real image geometry
def image_geometry(style = :original)
  @geometry ||= {}
  @geometry[style] ||= Paperclip::Geometry.from_file open("https:" + image.url(style))
end
person Daniel Hollands    schedule 02.08.2018