it-roy-ru.com

Ошибка PaperClip NotIdentifiedByImageMagickError при масштабировании изображений

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

Сообщение об ошибке: 

#<Paperclip::Errors::NotIdentifiedByImageMagickError:Paperclip::Errors::NotIdentifiedByImageMagickError> 

Вот подробности:

  • Mac OS X 10.8.3
  • ImageMagick 6.8.4-4 2013-03-29
  • libtool =>/usr/bin/libtool
  • Рельсы 3.2.13
  • Ruby 1.9.3p194

development.rb содержит соответствующий путь (и я убедился, что он правильный, используя which identify)

Paperclip.options[:command_path] = "/usr/local/bin/"

Gemfile.lock (соответствующая часть)

Paperclip (3.4.1)
  activemodel (>= 3.0.0)
  activerecord (>= 3.0.0)
  activesupport (>= 3.0.0)
  cocaine (~> 0.5.0)

МОДЕЛЬ (Я обновляю объект класса, но изображение находится в модели местоположения. (Classroom has_one :location, :as => :locatable)

Модель location.rb

class Location < ActiveRecord::Base
  ## Paperclip method for uploading location images

  has_attached_file :picture, :styles => {:show => "1200x500#", :medium => "300x300#", :thumb => "100x100>"}, :convert_options => {:show => "-gravity center"}  
  has_attached_file :building_sign, :styles => { :show => ["1200x500#", :jpg], :medium => ["300x300#", :jpg], :thumb => ["100x100#", :jpg] }, :convert_options => {:show => "-gravity center"}
  belongs_to :locatable, :polymorphic => true
  belongs_to :location_type  
  validates :name,  :presence => true

  validates :latitude, :presence => true,
                       :length => {:within => 9..18},
                       :numericality => true
  validates :longitude, :presence => true,
                        :length => {:within => 9..18},
                        :numericality => true
end

Контроллер classrooms_controller.rb

def update
  @classroom = Classroom.find_by_facility_code_heprod(params[:id].upcase)

  respond_to do |format|
    if @classroom.update_attributes(params[:classroom])
      format.html { redirect_to(@classroom, :notice => 'Classroom was successfully updated.') }
      format.xml  { head :ok }
    else
      format.html { render :action => "edit" }
      format.xml  { render :xml => @classroom.errors, :status => :unprocessable_entity }
    end
  end
end

Что я пробовал.

  • Я убедился, что имя изображения простое (USB2230.jpg), без двоеточий.
  • Я обновил версию ImageMagick до последней версии. 
  • Я также повторно загрузил и переустановил инструменты CommandLine для 10.8.3 (кто-то предположил, что проблема может быть связана с устаревшим libtool).
  • Я перезагрузил компьютер.
  • Я пробовал вариации на версии Gem, включая 

    # variation 1
    gem 'Paperclip', '~> 2.8.0'
    gem "cocaine", "=0.3.2"
    
    # variation 2
    gem "Paperclip", "~> 3.4.0"
    gem "cocaine", "= 0.4"
    
    # variation 3 (which is what is reflected in the included Gemfile.lock info above).
    gem "Paperclip", "~> 3.4.0"
    

Если я уберу масштабирование, 

:styles => {:show => "1200x500#", :medium => "300x300#", :thumb => "100x100>"},
:convert_options => {:show => "-gravity center"}

загрузка работает, но мне нужно масштабирование ;-)

Кто-нибудь может увидеть то, что мне не хватает?

23
humbledaisy

Я только что решил эту проблему . Brew выполняет вызов каталога Cellar, /usr/local/Cellar Проверьте, если у вас нет двух ImageMagick, у меня есть один с именем ImageMagick-Ruby182, поэтому, если он у вас запущен brew удалите ImageMagick-Ruby182, а также обычный imagemagick и переустановите магию изображений.

1
Jacobo de la Rosa

Мы только столкнулись с этой проблемой, и это оказалось проблемой, где ghostscript не был установлен. Я воспользовался советом Скотта Корнуэлла и удалил глушение ошибок, а затем решил, что конвертация не удалась, потому что ghostscript не был доступен.

   brew install ghostscript 

Исправлена ​​проблема для нас.

21
rwc9u

У меня была такая же проблема, хотя мой сервер работает на Linux. Не могу точно сказать вам, как это сделать, потому что у меня нет Mac для тестирования, но, надеюсь, это указывает вам верное направление.

Это сработало для меня с ImageMagick 6.8.5-5, Paperclip 3.4.2, последней версией кокаина, Rails 3.2.13:

Я вошел в geometry_detector_factory.rb в геме Paperclip и закомментировал 2 строки вокруг идентифицирующего вызова: (этот шаг не является необходимым, просто объясняя, что я сделал, чтобы определить проблему)

#silence_stream(STDERR) do 
    Paperclip.run("identify", "-format '%wx%h,%[exif:orientation]' :file", :file => "#{path}[0]")
#end

вместе с соответствующим «конечным» утверждением. Это позволило мне увидеть ошибки в командной строке при запуске команды «выявить».

В основном ошибка говорит: «нет делегата декодирования для этого формата изображения»

Вы, вероятно, можете найти эту ошибку и выяснить ее, но в основном я пошел в usr/local/bin и запустил: (также не обязательно, если вы не хотите видеть, что вы установили)

convert -list configure

и найдите строку ДЕЛЕГАТЫ. У меня был другой сервер Linux, на котором работал ImageMagick, и после сравнения двух я понял, что на новом установлены только 2 делегата. Я смог бежать:

yum install ImageMagick-devel

а затем перекомпилируйте ImageMagick с помощью make, make install и все заработало.

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

Отладка ImageMagick? Ни у кого нет времени на это!

10
Scott Cornwell

У меня была проблема в моей среде разработки окон, с использованием Paperclip 3.5.2, кокаина 0.5.3 и ImageMagic 6.8.8.

Решение было добавить:

Paperclip.options[:command_path] = 'C:\Program Files\ImageMagick-6.8.8-Q16'

в config/environment/development.rb

6
Alexander Schilpp

У меня была похожая проблема, но более старая Paperclip (3.0.2).

В моем случае я исправил это:

gem 'cocaine', '0.3.2'
3
tomaszbak

Переустановка libtool brew install libtool сработала для меня.

1
Edward Loveall

Только для записи:

brew uninstall libtool
brew install libtool
brew uninstall jpeg
brew install jpeg
brew link --overwrite jpeg
brew unlink freetype && brew link freetype
0
pablomarti

У меня была та же проблема с image_magic, которая нарушала нашу функциональность Paperclip в производстве, но не в разработке (странно, я знаю) . И все же даже после локального удаления imagemagick из нашего gemfile и Gemfile.lock (запускается установка пакета и все такое) и затем развертывание обратно в производство на героку, ошибка сохраняется в производстве! (странно, я знаю).

То, что закончилось, делало трюк:

$ heroku repo:purge_cache -a myAppName

(Взято из: https://github.com/heroku/heroku-repo#purge_cache )

Когда вы развертываете свое приложение, Heroku кэширует некоторые вещи, такие как ваши активы и установленные гемы, чтобы ускорить развертывание ........ Хотя это отличная функция, иногда она может иметь побочные эффекты, и в этом случае, кажется, что-то о том, что гем imagemagick «застрял» в производственном кеше, поэтому очистка решила для нас эту проблему (поскольку после очистки ваше приложение будет перестраиваться с нуля при следующем развертывании)

0
AmitF

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

Поэтому вам нужно использовать следующую команду: 

Sudo ldconfig /usr/local/lib

На самом деле, я советую переустановить imagemagick, используя шаги в как установить image-magick-and-setup-Paperclip .

0
Mohamed Yakout

Вы уже упоминали, что пытались обновить ImageMagick, но у меня была та же проблема, и обновление до ImageMagick 6.8.0-10 2013-03-03 устранило ее для меня.

0
chrisgooley

Пожалуйста, обновите версию драгоценного камня Paperclip и драгоценного камня кокаина . Установите версию Paperclip: 3.4.1 Установите версию кокаина: 0.5.

Я столкнулся с той же самой проблемой, и моя проблема уже была там в проблемах Paperclip gem github 

0
kapiltekwani