Rails 3&回形针:“'识别'命令无法识别”

时间:2011-10-20 09:21:31

标签: ruby-on-rails macos imagemagick paperclip

一些系统细节:

  • 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在调整图像大小之前甚至无法识别图像。

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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