删除paperclip引发的不必要的错误 - 'identify'命令无法识别filename

时间:2010-04-15 09:22:10

标签: ruby-on-rails ruby paperclip

我一直在寻找如何解决这个问题,但找不到任何真实有效的解决方案。

用户模型:

validates_attachment_content_type:avatar,:content_type => ['image / jpeg','image / pjpeg','image / x-png','image / png','image / gif']

上传无效文件类型时会显示不必要的错误:

Avatar /tmp/sample,23283,0.txt is not recognized by the 'identify' command.

服务器详情: Ubuntu和Debian

识别 结果 的/ usr /斌/鉴定

指定命令路径无法解决问题:

Paperclip.options[:command_path] = "/usr/bin"

有什么想法吗?

我查看了geometry.rb文件,似乎有些问题。

def self.from_file file
  file = file.path if file.respond_to? "path"
  geometry = begin
               Paperclip.run("identify", %Q[-format "%wx%h" "#{file}"[0]])
             rescue PaperclipCommandLineError
               ""
             end
  parse(geometry) ||
    raise(NotIdentifiedByImageMagickError.new("#{file} is not recognized by the 'identify' command."))
end

让我知道是否有人解决了同样的问题以及如何解决。非常感谢。

3 个答案:

答案 0 :(得分:2)

我遇到了同样的问题 - Paperclip代码没有错。

在我的设置中,我在MacOSX上使用/usr/local/ImageMagick-6.6.1/bin 中的ImageMagick二进制下载和我在Apache / Passenger下运行Rails。我已经将Paperclip安装为插件。

完成这项工作需要3个步骤:

1:确保ImageMagick在UNIX命令行级别工作。这包括将它添加到您的路径并导出这些环境变量(当然,指向您的ImageMagick安装)

MAGICK_HOME=/usr/local/ImageMagick-6.6.1
DYLD_LIBRARY_PATH=/usr/local/ImageMagick-6.6.1/lib

在命令行级别检查标识是否适用于您的图像。

2:告诉Paperclip在哪里可以找到ImageMagick可执行文件 在config / environment.rb中,将其添加到文件的底部

Paperclip.options[:command_path] = "/usr/local/ImageMagick-6.6.1/bin"

此时,重新启动Passenger后,您会看到“识别”是在Paperclip中运行但无法识别文件......最后一步是......

3:确定需要这两个导出的环境变量 - 而Apache / Passenger(或其他Web服务器可能)默认不通过这些变量! 在您的乘客vhost文件中添加以下行:

  SetEnv MAGICK_HOME /usr/local/ImageMagick-6.6.1
  SetEnv DYLD_LIBRARY_PATH /usr/local/ImageMagick-6.6.1/lib

重启apache / passenger,它应该可以正常工作

祝你好运!

答案 1 :(得分:1)

您应该安装 imagemagick ,它提供标识命令,其路径必须位于用户rails运行的$PATH变量中。

它由回形针用于缩放和图像处理选项,但它没有记录为依赖,因为如果你接受图像,你可以“不”使用回形针。

我希望它有所帮助。

答案 2 :(得分:1)