Ошибка скрепки 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'
пожалуйста, обновите версию скрепку 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