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
  • 导轨 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"}

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

谁能看到我缺少的东西?

4

11 回答 11

22

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

   brew install ghostscript 

为我们解决了这个问题。

于 2013-06-25T18:09:22.003 回答
10

我有同样的问题,虽然我的服务器在 Linux 上。无法确切告诉您如何操作,因为我没有要测试的 Mac,但希望这会为您指明正确的方向。

这适用于 ImageMagick 6.8.5-5、Paperclip 3.4.2、最新版本的可卡因、Rails 3.2.13:

我进入了 Paperclip gem 中的 geometry_detector_factory.rb 并注释掉了识别调用周围的两行:(这一步不是必需的,只是解释我为确定问题所做的工作)

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

以及相应的“结束”语句。这使我在运行“识别”命令时可以在命令行上看到错误。

基本上错误说:“这种图像格式没有解码委托”

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

convert -list configure

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

yum install ImageMagick-devel

然后用 make 重新编译 ImageMagick,make install 就可以了。

您还可以在 ImageMagick 站点上手动找到代理并一一安装,但该库对我来说几乎涵盖了它。

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

于 2013-05-28T23:53:27.590 回答
6

在我的窗口开发环境中遇到问题,使用回形针 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

于 2014-01-17T11:03:25.860 回答
3

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

就我而言,我用以下方法修复了它:

gem 'cocaine', '0.3.2'
于 2013-04-27T21:29:34.373 回答
1

重新安装 libtoolbrew install libtool对我有用。

于 2013-07-18T20:39:15.843 回答
1

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

于 2016-03-03T07:28:41.433 回答
0

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

我遇到了同样的问题,我的问题已经出现在回形针 gem github 问题中

于 2013-04-04T06:45:30.660 回答
0

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

于 2013-05-14T01:39:45.740 回答
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 的某些东西“卡”在了生产的缓存中,这就是为什么清除为我们解决了这个问题(因为在清除之后,您的应用将在下一次部署时从头开始重建)

于 2014-11-26T17:47:01.960 回答
0

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

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

sudo ldconfig /usr/local/lib

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

于 2014-12-16T11:33:12.037 回答
0

仅作记录:

brew uninstall libtool
brew install libtool
brew uninstall jpeg
brew install jpeg
brew link --overwrite jpeg
brew unlink freetype && brew link freetype
于 2015-10-21T00:29:47.657 回答