Ошибка 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"}
загрузка работает, но мне нужно масштабирование; -)
Может ли кто-нибудь увидеть то, что мне не хватает?
Ответы
Ответ 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