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

Ошибка 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
  • Rails 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)

MODEL (я обновляю объект класса, но изображение находится в модели местоположения. (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 Tools для 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"}

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

   brew install ghostscript 

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

Ответ 3

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

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

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

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

convert -list configure

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

yum install ImageMagick-devel

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

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

Отладка ImageMagick? Разве у кого нет времени для этого?

Ответ 4

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

Ответ 5

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

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

gem 'cocaine', '0.3.2'

Ответ 6

Обновите версию драгоценного камня скрепки и кокаина. Установить версию PaperClip: 3.4.1 Установите версию Cocaine: 0.5.

Я столкнулся с той же проблемой, и моя проблема уже была в проблемах gigub gapub paperclip

Ответ 7

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

Ответ 8

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

Ответ 9

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

В результате получилось трюк:

$ heroku repo:purge_cache -a myAppName

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

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

Ответ 10

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

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

sudo ldconfig /usr/local/lib

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

Ответ 11

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

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