Ошибка скрепки 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
  • Рубин 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 до последней.
  • я также повторно загрузил и переустановил инструменты командной строки для 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"}

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

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

11 ответов


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


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

   brew install ghostscript 

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


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

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

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

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

вместе с соответствующим утверждением "end". Это позволило мне увидеть ошибки в командной строке при выполнении команды "идентифицировать".

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

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

convert -list configure

и искать делегатов линии. У меня был еще один сервер Linux, где работал ImageMagick, и после сравнения двух я понял, что у нового было установлено только 2 делегата. Я смог бежать:

yum install ImageMagick-devel

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

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

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


была проблема в моей среде разработки окна, используя скрепку 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


У меня была аналогичная проблема, но более старая Скрепка (3.0.2).

в моем случае я исправил его с помощью:

gem 'cocaine', '0.3.2'

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


пожалуйста, обновите версию скрепку Gem и кокаин камень. Комплект скрепки версия: 3.4.1 Версия набора кокаина: 0.5.

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


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


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

что в конечном итоге делает трюк работает:

$ heroku repo:purge_cache -a myAppName

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

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


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

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

sudo ldconfig /usr/local/lib

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


просто для протокола:

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