Rails Paperclip和Passenger“未识别'identify'命令”。

42

当我上传照片时,我的模型未通过验证,即使没有任何验证,我也会收到以下错误消息:

/tmp/stream20100103-13830-ywmerx-0 is not recognized by the 'identify' command. and     
/tmp/stream20100103-13830-ywmerx-0 is not recognized by the 'identify' command.

我相信这与ImageMagick无关,因为我已经从上传过程中删除了任何图像处理,并尝试上传了不同的MIME类型,例如.txt文件等。

此外,我发现可能有用的东西。一篇博客文章声称在我的环境中(在这种情况下是development.rb)放置以下内容可能起作用。

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

重新安装ImageMagick...只是为了看看是否能解决任何问题。 - JP Silvashy
1
这与ImageMagick有关,但您能否在您的模型中包含paperclip语句? command_path选项需要指向安装了identify的位置。从命令行可以使用which identify来确定此位置。 - Ryan McGeary
嗯,你说得对Ryan(又一次),如果你想回答问题,你会得到一个大的绿色勾选标记。 - JP Silvashy
14个回答

49

这与ImageMagick有关。 command_path选项需要指向安装identify的位置。从命令行,您可以使用which identify来确定此位置。

$ which identify
/some/path/to/identify

之后,在config/environments/development.rb中将command_path设置为该路径:

Paperclip.options[:command_path] = "/some/path/to"

我几乎完全有这个问题,除了一件事:错误只出现在我尝试附加视频时!有什么想法?:( - Erik Escobedo
哦,我的识别标识为什么不能用啊?有什么原因吗? - sscirrus
请确保已安装ImageMagick并将其添加到您的PATH路径中。sscirrus - Ryan McGeary

15

这也可能是由于使用相当旧的Paperclip版本(例如2.4.x版本)与更新的、不兼容的Cocaine宝石版本一起使用引起的。


谢谢,那真是太有帮助了! - Zubin
3
在Gemfile中添加"gem 'cocaine', '~> 0.3.2'",然后运行"bundle update cocaine",这个解决了我的问题。 - Shai Coleman
使用Cocaine 0.4.2精确地安装Paperclip 2.3.4。但是,Paperclip 2.3.16安装失败。 - TomDunning

6
我可以通过以下方法解决这个问题:
brew uninstall imagemagick
brew install imagemagick

4

当我将OS X升级到Lion时,发生了这种情况。

解决方法是...

注意,在重新安装ghostscript之前,我必须应用此处找到的建议:https://github.com/mxcl/homebrew/issues/6381

brew edit ghostscript

然后将def patches块添加到Ghostscript类的底部:

class Ghostscript < Formula
    .... existing code here ....

    def patches
        { :p0 => 'http://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/print/ghostscript/patches/patch-ak' }
    end
end 

当您阅读此内容时,以上补丁可能已经合并。

之后,ImageMagick可以正确地检测到JPEG文件。

简而言之,完全卸载并重新安装Homebrew、Ghostscript(带有Lion补丁)和ImageMagick。


3

我通过安装Homebrew使其正常工作,链接

然后我输入了以下命令:

brew install imagemagick

然后,之后。
gem install rmagick

然后我只是删除了手动输入在environment/development.rb和initialize/paperclip.rb中的选项路径(Paperclip.options[:command_path] = "...")

将rmagick添加到gem文件中。重新启动服务器,就能像魔术般地运行了!


2

1
通常情况下,通过指定识别命令的路径会有所帮助。
Paperclip.options[:command_path] = "/your/path/to/identify"

正如其他人所提到的那样。但是,如果版本不匹配,问题也可能会发生。我最近更新了一个应用程序的Ruby-on-Rails版本(到Rails 3.1.10),但忘记更新paperclip gem。在我将paperclip版本更新为2.8.0之后,它又可以工作了。


1

再提供一种潜在的解决方案,我没有看到讨论过的:ldconfig

我遇到了同样的问题,花了一天半的时间来追踪。我从源代码正确地重新安装了ImageMagick,并添加了额外的png和jpeg支持,将LD_LIBRARY_PATHDYLD_LIBRARY_PATH添加到环境变量中,在生产环境配置中设置了:command_path选项。虽然ImageMagick命令可以在命令行中工作,但没有任何方法可以解决我的Paperclip问题。

最后,在偶然看到ldconfig的提及后,我试着使用它,结果奏效了。

sudo ldconfig

我可能通过重新启动Apache或硬件来完成相同的事情,但我没有自己做这件事的立场。


1
如果您尝试上传一个文件名中包含冒号的文件,最新版本也会出现此错误消息。

0
如果你正在尝试上传视频,那么很可能,“identify”会尝试将工作委托给ffmpeg。例如:
   identify Desktop/00-ScalingRails-Introduction.mp4      [alaa@Zero>/home/alaa]
   identify: delegate failed `"ffmpeg" -v -1 -vframes %S -i "%i" -vcodec pam -an -f rawvideo -y "%u.pam" 2> "%Z"' @ error/delegate.c/InvokeDelegate/1061.
   identify: unable to open image `/tmp/magick-XXHF4ImT.pam':  @ error/blob.c/OpenBlob/2498

在这个例子中,安装ffmpeg将错误消息从验证错误列表中删除了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接