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"
4

14 回答 14

49

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

$ which identify
/some/path/to/identify

之后,设置command_path为该路径(in config/environments/development.rb):

Paperclip.options[:command_path] = "/some/path/to"
于 2010-01-03T21:45:26.813 回答
15

这也可能是由于将相当旧的版本Paperclip(例如,2.4.x 版)与较新的不兼容版本的Cocainegem 一起使用造成的。

于 2012-11-15T00:05:41.863 回答
6

我能够通过执行以下操作来解决此问题:

brew uninstall imagemagick
brew install imagemagick
于 2012-09-04T22:24:14.630 回答
4

当我将 OS X 升级到 Lion 时,这发生在我身上。

通过...解决了

  • 做一个brew list查看您拥有的所有软件包并将其保存在某个地方

  • 卸载自制软件(请参阅本页https://github.com/mxcl/homebrew/wiki/Installation上的“卸载” )

  • 用通常的方式重新安装自制软件

    ruby -e "$(curl -fsSL https://raw.github.com/gist/323 ​​731 )"

  • 为您拥有的任何其他人重新安装所有软件包brew install ghostscript brew install imagemagick

请注意,在重新安装 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。

TL;DR 完全卸载并重新安装自制软件、ghostscript(带有 Lion 补丁)和 imagemagick

于 2011-07-23T23:10:45.080 回答
3

我通过安装 brew, Link让它工作了

然后我输入:

brew install imagemagick

在那之后

gem install rmagick

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

将 rmagick 添加到 gem 文件中。重新启动服务器,它就像一个魅力!

于 2011-03-22T22:13:57.880 回答
2

这从http://arglebargle.posterous.com/path-environment-variable-for-rails-using-pas

在 VirtualHost 中(或设置乘客的任何地方)放置类似的内容:

SetEnv PATH /opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/usr/local/mysql/bin
于 2010-05-13T14:11:14.063 回答
1

添加一个我没有看到太多讨论的潜在解决方案:ldconfig.

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

最后在看到ldconfig顺便提一下之后,我一时兴起尝试了它,它奏效了。

sudo ldconfig

通过重新启动 apache 或硬件,我可能已经能够完成同样的事情,但我自己无法做到这一点。

于 2010-03-19T19:36:21.760 回答
1

如果您尝试上传最新版本的名称中包含冒号的文件,您也会收到此错误消息。

于 2012-10-09T21:11:47.847 回答
1

通常它有助于指定识别命令的路径..

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

..正如其他人提到的。但是如果版本不匹配也会出现问题,我最近更新了应用程序的 Ruby-on-Rails 版本(到 Rails 3.1.10),但忘记更新回形针 gem。在我将回形针版本更新到 2.8.0 后,它又可以工作了。

于 2013-01-16T10:41:59.853 回答
0

如果您正在尝试上传视频,那么“识别”可能会尝试将工作委托给 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 从验证错误列表中删除了错误消息

于 2011-05-18T18:47:20.690 回答
0

只是说,你也可以得到这个错误信息的含义。

在我的情况下,文件大小为 0 字节长度,因为我在从 Zip 写入文件并将此资源传递给 Paperclip 后忘记刷新它。

在阅读此线程的其他答案之前,检查您是否可以使用首选查看器打开文件可能会很有趣:)

于 2012-12-12T13:54:34.080 回答
0

如果您是 Mac 用户,并且这只是将您的操作系统更新到 10.8 后才出现的问题,那么它可能是 X11 问题,如此处所述http://support.apple.com/kb/HT5293

识别 ~/path/to/image

即使在尝试了上述所有修复后也没有为我工作。我从http://xquartz.macosforge.org/landing/安装了 XQuartz ,现在它又可以工作了。

也可以帮助别人...

于 2013-04-23T10:22:03.727 回答
0

这也发生在我身上,我尝试了上面提到的所有方法。我只是更改回形针版本,然后一切正常。

于 2013-05-25T03:25:08.143 回答
0

我在使用 OSX + MAMP + Passenger + Paperclip 时遇到了这个问题,并且在设置了 command_path 并确保通过 brew 正确安装了 imagemagick 后,将乘客的临时目录和上传目录正确设置为可写的东西,它仍然无法正常工作!

解决方案是在 /Applications/MAMP/Library/bin/envvars 中编辑 MAMP 的 envvars 文件,并注释掉 export DYLD_LIBRARY_PATH 行。

也就是说,改变说

export DYLD_LIBRARY_PATH

# export DYLD_LIBRARY_PATH

然后重新启动 MAMP 并在您的图像正确上传/调整大小时感到兴奋。

于 2013-10-11T17:31:24.020 回答