当缩放图片时,出现了PaperClip错误NotIdentifiedByImageMagickError

23

我已经苦恼了几天,我的图像上传器最近停止正常工作。我已经调查了几个可能性,但是没有一种建议的解决方案适用于我的情况。

错误信息为:

#<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。
  • 重新下载并安装了适用于10.8.3的CommandLine工具(有人建议问题可能与过时的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个回答

22

我们刚刚遇到了这个问题,结果发现是由于没有安装ghostscript引起的问题。我按照Scott Cornwell的建议删除了错误消息的静音设置,然后确定convert失败是因为ghostscript不可用。

   brew install ghostscript 

问题已经为我们解决了。


2
这正是我的问题所在 - 我正在使用Paperclip上传和缩略图PDF。没有安装Ghostscript导致了悲伤。 - riney
太好了,这解决了我的问题!我只是想上传一个PDF文件 - 不需要缩略图或任何操作。除非Paperclip尝试从PDF中为您创建缩略图而没有明确的请求,否则错误消息有点误导。 - Dorian

10

我有同样的问题,尽管我的服务器是Linux。我不能告诉你确切的方法如何解决,因为我没有Mac进行测试,但希望这可以指引你正确的方向。

对于我来说,使用ImageMagick 6.8.5-5,Paperclip 3.4.2,最新版本的cocaine和Rails 3.2.13可以解决这个问题:

我进入了Paperclip gem中的geometry_detector_factory.rb,并注释掉了identify调用周围的两行代码:(这一步不是必要的,只是解释我如何确定问题的)

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

与相应的"end"语句一起。这使我能够在运行"identify"命令时在命令行上看到错误。

基本上,错误信息是:"无法对此图像格式进行解码委托"

您可以查找该错误并解决问题,但我所做的基本上是转到usr/local/bin并运行:(除非您想查看已安装的内容,否则也不是必需的)

convert -list configure

并查找DELEGATES行。我有另一台Linux服务器,其中ImageMagick正在工作,经过比较后,我意识到新的服务器只安装了2个代理。我能够运行:

yum install ImageMagick-devel

然后使用 make、make install 重新编译 ImageMagick,就可以解决问题了。

你也可以在 ImageMagick 站点手动查找委托程序并逐个安装,但那个库对我来说已经覆盖了大部分功能。

调试 ImageMagick?没有人有那么多时间!


1
谢谢!这在我的客户机上起作用了。(最终我使用了Mac端口,虽然我很不情愿这样做,但我花了太多时间来调试。)我遵循的说明在这里(http://www.imagemagick.org/script/binary-releases.php#macosx)。我还必须更改我的开发环境以指向Paperclip.options[:command_path] = "/opt/local/bin/"。 - humbledaisy
Ubuntu怎么办?:/我也遇到了同样的问题,还没有找到解决方案。 - Paladini

6

我在我的Windows开发环境中遇到了问题,使用的是paperclip 3.5.2、cocaine 0.5.3和ImageMagic 6.8.8。

解决方法是添加:

Paperclip.options[:command_path] = 'C:\Program Files\ImageMagick-6.8.8-Q16'

编辑config/environment/development.rb文件:


3

我遇到了类似的问题,但是使用的是较旧版本的PaperClip(3.0.2)。

在我的情况下,我通过如下方式解决了问题:

gem 'cocaine', '0.3.2'

1
我刚解决了这个问题。 brew 会创建一个名为 Cellar 的目录,路径为 /usr/local/Cellar。 请确认您没有两个 ImageMagick,我有一个名为 ImageMagick-Ruby182 的版本,如果您也有,请运行 brew uninstall ImageMagick-Ruby182,然后卸载普通的 imagemagick,并重新安装 image magic。

1

重新安装libtool,brew install libtool对我有用。


0

我们在生产环境中遇到了与ImageMagick相关的问题,这导致我们的Paperclip功能无法正常工作,但在开发环境中却没有出现这种情况(很奇怪,我知道)。 即使我们从gemfile和Gemfile.lock中删除了ImageMagick,并在本地运行了bundle install等操作,然后再次部署到Heroku上的生产环境中,错误仍然存在!(很奇怪,我知道)。

最终解决问题的方法是运行:

$ heroku repo:purge_cache -a myAppName

(来源:https://github.com/heroku/heroku-repo#purge_cache

当您部署应用程序时,Heroku会将一些内容缓存,如资源和安装的宝石,以加快部署速度。 尽管这是一个很好的功能,但有时也会产生副作用,在这种情况下,似乎关于imagemagick宝石的某些内容在生产缓存中“卡住了”,这就是为什么清除缓存可以解决问题的原因(因为在清除后,您的应用程序将在下次部署时从头开始重新构建)。


0

仅供记录:

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

0
请更新paperclip gem和cocaine gem的版本。 设置PaperClip版本:3.4.1 设置Cocaine版本:0.5。
我遇到了同样的问题,我的问题已经在paperclip gem的github issues中了。

版本已经更新到3.4.1,而且Gemfile.lock中列出的cocaine版本是0.5.0。 - humbledaisy

0

您已经提到过尝试升级ImageMagick,但我也遇到了同样的问题,将其升级至ImageMagick 6.8.0-10 2013-03-03后问题得到解决。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接