Подтвердить что ты не робот

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

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

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

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

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

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

EDIT:

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

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
4b9b3361

Ответ 1

Если вы используете 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

Ответ 2

Это работает для 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