缩放图像时PaperClip错误NotIdentifiedByImageMagickError

时间:2013-04-01 13:57:31

标签: ruby-on-rails imagemagick paperclip

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

错误消息是:

#<Paperclip::Errors::NotIdentifiedByImageMagickError:Paperclip::Errors::NotIdentifiedByImageMagickError> 

以下是详细信息:

  • Mac OS X 10.8.3
  • ImageMagick 6.8.4-4 2013-03-29
  • libtool =&gt;的/ usr /斌/ 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

Controller 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有关)。
  • 我重启了电脑。
  • 我尝试过宝石版本的变体,包括

    # 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 个答案:

答案 0 :(得分:21)

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

   brew install ghostscript 

为我们解决了这个问题。

答案 1 :(得分: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

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

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

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

convert -list configure

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

yum install ImageMagick-devel

然后使用make重新编译ImageMagick,make install并运行。

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

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

答案 2 :(得分:6)

如果我的窗口环境出现问题,请使用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

答案 3 :(得分:3)

我有类似的问题,但旧的PaperClip(3.0.2)。

在我的情况下,我修复了:

gem 'cocaine', '0.3.2'

答案 4 :(得分:1)

重新安装libtool brew install libtool为我工作。

答案 5 :(得分:1)

我刚刚解决了这个问题。 brew打电话给Cellar,/ usr / local / Cellar 验证你是否有两个ImageMagick,我有一个名为ImageMagick-Ruby182,所以,如果你有它运行brew卸载ImageMagick-Ruby182,还有正常的imagemagick,并重新安装图像魔法。

答案 6 :(得分:0)

请更新回形针宝石和可卡因宝石的版本。 设置PaperClip版本:3.4.1 设置可卡因版本:0.5。

我遇到了同样的问题,我的问题已经出现在paperclip gem github问题

答案 7 :(得分:0)

您已经提到过您尝试升级ImageMagick,但我遇到了同样的问题并升级到ImageMagick 6.8.0-10 2013-03-03为我修复了它。

答案 8 :(得分:0)

与image_magic有同样的问题,它在生产中破坏了我们的回形针功能,但没有在开发中(很奇怪,我知道)。 即使从我们的gemfile和Gemfile.lock本地删除imagemagick(运行bundle install和所有这些东西)然后在heroku上部署回生产,错误仍然存​​在于生产中! (很奇怪,我知道)。

最终做的诀窍是:

$ heroku repo:purge_cache -a myAppName

(摘自:https://github.com/heroku/heroku-repo#purge_cache

当您部署应用程序时,Heroku会缓存一些内容,例如您的资产和已安装的gem,以加快部署速度。 虽然这是一个很棒的功能,但它有时会产生副作用,在这种情况下,似乎有关于imagemagick gem的东西被“卡住”在生产缓存中,这就是为什么清除为我们解决了问题(因为在清除之后,您的应用将在下次部署时从头开始重建)

答案 9 :(得分:0)

我有同样的问题,当我配置动态链接器运行时绑定以使用ldconfig command创建必要的链接并缓存到最新的共享库时,我解决了它。

所以你需要使用以下命令:

sudo ldconfig /usr/local/lib

实际上,我建议使用how-to-install-image-magick-and-setup-paperclip的步骤重新安装imagemagick。

答案 10 :(得分:0)

仅供记录:

public static void copyAndResizePhoto(Context context, Uri srcUri, File destFile) {
    String[] orientationColumn = {MediaStore.Images.Media.ORIENTATION};
    Cursor cursor = context.getContentResolver().query(srcUri, orientationColumn, null, null, null);
    int orientation = -1;
    if (cursor != null && cursor.moveToFirst()) {
        orientation = cursor.getInt(cursor.getColumnIndex(orientationColumn[0]));
    }
    if (cursor != null)
        cursor.close();
}