Rails 3 和 Paperclip:“'identify' 命令无法识别”

Posted

技术标签:

【中文标题】Rails 3 和 Paperclip:“\'identify\' 命令无法识别”【英文标题】:Rails 3 & Paperclip: "not recognized by the 'identify' command"Rails 3 和 Paperclip:“'identify' 命令无法识别” 【发布时间】:2011-10-20 09:21:30 【问题描述】:

一些系统细节:

Mac OS X Lion 10.7.2、Rails 3、Paperclip gem。 ImageMagick 6.7.3-0,使用/opt/local/bin 中的 MacPorts 安装的二进制文件。 在开发环境中使用 WEBrick。

我正在尝试上传应该缩小为缩略图的照片。当我这样做时,原始上传的文件被保存并且可以通过 HTTP 正确访问。当我尝试访问缩略图版本时,我收到此错误:

Routing Error
No route matches "[file_URL]"

在此之前,当上传有效的 PNG 文件时,我在 WEBrick 日志中看到此错误:

[paperclip] An error was received while processing: #<Paperclip::NotIdentifiedByImageMagickError: /var/folders/n4/62q22gb52rjd0h13cx_j8vv40000gq/T/stream20111020-24984-17560xt-0.png is not recognized by the 'identify' command.>

which identify 输出:

/opt/local/bin/identify

使用上传文件的路径调用identify,将文件正确识别为PNG文件。

我确认rails server 启动开发环境。我在config/environments/development.rb中添加了以下内容:

Paperclip.options[:command_path] = "/opt/local/bin"

我的照片模型有以下内容:

class Photo < ActiveRecord::Base
  has_attached_file :file, :default_style => :view, :styles => 
    :view =>  :geometry => '520x390>', :format => 'jpg' ,
    :preview =>  :geometry => '160x120>', :format => 'jpg'  
  validates_attachment_content_type :file,
    :content_type => [ 'image/jpeg', 'image/pjpeg', 'image/png' ]
end

我的照片控制器:

class PhotosController < ApplicationController
  # ...
  def create
    @photo = Photo.create params[:photo]
  end
end

就像我说的,我可以访问 URL 路径 system/files/:id/original 中的原始图像,但是我想要的调整大小的版本无法访问,并且在文件系统中找不到。 WEBrick 的日志表明 Paperclip 甚至无法让 ImageMagick 在调整图像大小之前对其进行识别。

有什么想法吗?提前致谢!

【问题讨论】:

当文件最初上传并且回形针尝试处理它时会出现问题(NotIdentifiedByImageMagickError)。这个问题可能是重复的:***.com/questions/1623948/… 【参考方案1】:

如上所述,这可能是一个重复的问题,但这个问题是由 ImageMagick 6.7.3-0 中最近在 6.7.3-1 中修复的错误引起的。 MacPorts 也已更新为新版本。

在 6.7.3-0 中,在文件路径中声明帧号(例如 identify /path/to/file.png[0])导致 ImageMagick 出现段错误(“Segmentation fault 11”)。 Paperclip 指定帧号以确保其处理图像文件的第一帧或第一页。

ImageMagick 的新版本解决了这个问题。 MacPorts 上提到了这个错误:

https://trac.macports.org/ticket/31643

【讨论】:

以上是关于Rails 3 和 Paperclip:“'identify' 命令无法识别”的主要内容,如果未能解决你的问题,请参考以下文章

Rails 6,Paperclip,S3,s3_direct_upload @attachment.save 在 s3_direct_upload 完成后不保存

Rails 和 Paperclip - 调整大小问题

如何将文件从 HTML5 拖放到 Rails 3 应用程序和回形针?

Rails:Paperclip 为相似的视频产生不同的结果

Paperclip + Rails 与负载平衡机器

在 Paperclip 和 Rails 4 中将 Jcrop 坐标转换为 convert_options