Ошибка скрепки при повторной обработке после обновления рельсов 3 - PullRequest
4 голосов
/ 18 января 2011

У меня есть скрепка, работающая с загрузкой и сохранением различных стилей для изображений, но когда я собираюсь обрезать изображение с помощью jcrop из урока railscasts, оно не обрезает изображение. Я получаю эту ошибку

[paperclip] identify -format %wx%h '/var/folders/z+/z+KzOZBFE9irCpbMKKBGFk+++TI/-Tmp-/paperclip-reprocess20110118-19757-1wtrjaj-0[0]' 2>/dev/null
[paperclip] convert '/var/folders/z+/z+KzOZBFE9irCpbMKKBGFk+++TI/-Tmp-/paperclip-reprocess20110118-19757-1wtrjaj-0[0]' -crop 28x32+13+15-resize "400x400>" '/var/folders/z+/z+KzOZBFE9irCpbMKKBGFk+++TI/-Tmp-/paperclip-reprocess20110118-19757-1wtrjaj-020110118-19757-1a5n558-0.jpg' 2>/dev/null
[paperclip] An error was received while processing: #<Paperclip::PaperclipError: There was an error processing the thumbnail for paperclip-reprocess20110118-19757-1wtrjaj-0>

Это работало в рельсах 2.3.9, но hvae только что обновился до рельсов 3.0.3 Я получил все последние драгоценные камни и т. Д.

Файл cropper.rb выглядит следующим образом и находится в каталоге инициализаторов

module Paperclip
  class Cropper < Thumbnail
    def transformation_command
      if crop_command
        crop_command + super.join(" ").sub(/ -crop \S+/, '')
      else
        super
      end
    end

    def crop_command
      target = @attachment.instance   

      if target.cropping?
        " -crop #{target.crop_w.to_i}x#{target.crop_h.to_i}+#{target.crop_x.to_i}+#{target.crop_y.to_i}"
      end
    end
  end
end

Размеры входят в это, но фактически не обрезают изображение.

Пожалуйста, кто-нибудь может помочь с этим?

большое спасибо Ричард Мосс

Ответы [ 2 ]

12 голосов
/ 18 января 2011

Вот мой рабочий файл:

module Paperclip
  class Cropper < Thumbnail
    def transformation_command
      if crop_command
        crop_command + super.join(' ').sub(/ -crop \S+/, '').split(' ') # super returns     an array like this: ["-resize", "100x", "-crop", "100x100+0+0", "+repage"]
      else
        super
      end
    end

    def crop_command
      target = @attachment.instance
      if target.cropping?
        ["-crop", "#{target.crop_w}x#{target.crop_h}+#{target.crop_x}+#{target.crop_y}"]
      end
    end
  end
end
3 голосов
/ 29 ноября 2013

Так же, как дополнение к принятому ответу (если вы следите за Railscast Райана Бейтса), вам необходимо удалить следующие строки из вашей модели:

after_update :reprocess_avatar, :if => :cropping?

def reprocess_avatar
  avatar.reprocess!
end

Это приведет к бесконечностипетля.Затем вам просто нужно переместить логику к действию обновления в контроллере, добавив что-то вроде этого:

if @user.cropping?
  @user.avatar.reprocess!
end

Я зациклился на этом некоторое время, так что подумал, что бы поделиться

...