缩放图像时PaperClip错误NotIdentifiedByImageMagickError

hum*_*isy 23 ruby-on-rails imagemagick paperclip

几天来,我一直在抨击我.最近,我的图片上传器已停止正常工作.我已经研究了几种可能性,但没有一个建议的解决方案适用于我的情况.

错误消息是:

#<Paperclip::Errors::NotIdentifiedByImageMagickError:Paperclip::Errors::NotIdentifiedByImageMagickError> 
Run Code Online (Sandbox Code Playgroud)

以下是详细信息:

  • 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/"
Run Code Online (Sandbox Code Playgroud)

Gemfile.lock (相关部分)

paperclip (3.4.1)
  activemodel (>= 3.0.0)
  activerecord (>= 3.0.0)
  activesupport (>= 3.0.0)
  cocaine (~> 0.5.0)
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

调节器 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
Run Code Online (Sandbox Code Playgroud)

我试过的.

  • 我确保图像名称很简单(USB2230.jpg),没有冒号.
  • 我已将ImageMagick的版本更新到最新版本.
  • 我还重新下载并重新安装了针对10.8.3的CommandLine Tools(有人建议该问题可能与过时的libtool有关).
  • 我重新启动了电脑.
  • 我尝试过宝石版本的变体,包括

    # 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"
    
    Run Code Online (Sandbox Code Playgroud)

如果我删除缩放,

:styles => {:show => "1200x500#", :medium => "300x300#", :thumb => "100x100>"},
:convert_options => {:show => "-gravity center"}
Run Code Online (Sandbox Code Playgroud)

上传工作,但我有点需要缩放;-)

谁能看到我失踪的东西?

rwc*_*c9u 22

我们遇到了这个问题,结果发现这是一个没有安装ghostscript的问题.我接受了Scott Cornwell的建议并删除了错误的沉默,然后确定转换失败,因为ghostscript不可用.

   brew install ghostscript 
Run Code Online (Sandbox Code Playgroud)

修复了我们的问题.

  • 这正是我的问题的原因 - 我使用Paperclip上传和缩放PDF.没有安装Ghostscript导致悲伤. (2认同)

Sco*_*ell 10

虽然我的服务器在Linux上,但我遇到了同样的问题.不能告诉你究竟该怎么做,因为我没有Mac测试,但希望这指向你正确的方向.

这对我有用ImageMagick 6.8.5-5,Paperclip 3.4.2,最新版本的可卡因,Rails 3.2.13:

我进入了Paperclip gem中的geometry_detector_factory.rb并注释了识别调用周围的2行:( 这一步没有必要,只是解释我做了什么来确定问题)

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

以及相应的"结束"声明.这使我在运行"ide​​ntify"命令时可以在命令行上看到错误.

基本上错误说:"此图像格式没有解码代理"

您可能会查找该错误并将其弄清楚,但基本上我所做的是转到usr/local/bin并运行:( 也没必要,除非您想查看已安装的内容)

convert -list configure
Run Code Online (Sandbox Code Playgroud)

并寻找DELEGATES线.我有另一台运行ImageMagick的Linux服务器,在比较两者后,我意识到新服务器只安装了2个代理.我能够跑:

yum install ImageMagick-devel
Run Code Online (Sandbox Code Playgroud)

然后使用make,make install重新编译ImageMagick并且它工作正常.

您也可以在ImageMagick网站上手动找到代理并逐个安装,但该库几乎涵盖了它.

调试ImageMagick?是不是没有人有时间!


小智 6

如果我的窗口开发环境有问题,请使用paperclip 3.5.2,可卡因0.5.3和ImageMagic 6.8.8.

解决方案是添加:

Paperclip.options[:command_path] = 'C:\Program Files\ImageMagick-6.8.8-Q16'
Run Code Online (Sandbox Code Playgroud)

to config/environment/development.rb


小智 1

我刚刚解决了这个问题。brew 创建一个目录调用 Cellar,/usr/local/Cellar 验证您是否没有两个 ImageMagick,我有一个名为 ImageMagick-Ruby182,所以,如果您有它,请运行brew 卸载 ImageMagick-Ruby182,以及正常的 imagemagick,并重新安装图像魔法。