导轨回形针和乘客'不能被“识别”命令识别
当我上传一张照片时,我的模型validation失败,甚至没有任何validation错误我返回这个错误:
/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无关,因为我已经从上传中删除了任何image processing,我也尝试上传不同的MIMEtypes,如.txt文件等。
另外,我发现了一些可能起作用的东西。 一篇博文声称,把以下内容放在我的环境中(在这种情况下是development.rb)
Paperclip.options[:command_path] = "/opt/local/bin"
这与ImageMagick有关。 command_path
选项需要指向安装identify
的位置。 从命令行,你可以确定这与which identify
。
$ which identify /some/path/to/identify
之后,将command_path
设置为该path(在config/environments/development.rb
):
Paperclip.options[:command_path] = "/some/path/to"
这也可能是由于较旧版本的Paperclip
(例如版本2.4.x)与Cocaine
gem的较新版本不兼容造成的。
我能够通过执行以下操作来解决此问题:
brew uninstall imagemagick brew install imagemagick
当我将OS X升级到Lion时,这发生在我身上。
解决了…
-
做一个
brew list
,看看你所有的软件包,并保存在某个地方 -
卸载自制软件(请参阅此页上的“卸载” https://github.com/mxcl/homebrew/wiki/Installation )
-
用平时重新安装自制软件
ruby -e“$(curl -fsSL https://raw.github.com/gist/323731 )”
-
重新安装所有软件包
brew install ghostscript
brew install imagemagick
等任何其他人
请注意,在ghostscript重新安装之前,我不得不应用在这里find的build议: 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
我通过安装brew来工作, http://mxcl.github.com/homebrew/
然后我input:
brew install imagemagick
在那之后
gem install rmagick
然后我删除了在environment / development.rb中手动input的选项path(Paperclip.options [:command_path] =“…”),并初始化/ paperclip.rb
添加rmagick到gem文件。 重新启动服务器,它的工作就像一个魅力!
这工作从http://arglebargle.posterous.com/path-environment-variable-for-rails-using-pas
在VirtualHost(或乘客build立的地方)放置这样的东西:
SetEnv PATH /opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/usr/local/mysql/bin
要添加一个我还没有看过的更多的潜在解决scheme: ldconfig
。
我遇到了同样的问题,我只花了一天半的时间来追踪。 我正确地重新安装ImageMagick从源和额外的PNG和JPEG支持,我添加LD_LIBRARY_PATH
和DYLD_LIBRARY_PATH
到环境variables,我在我的生产环境configuration中设置Paperclip :command_path
选项。 虽然ImageMagick命令从命令行工作,但没有什么能解决我的Paperclip问题。
最后,看到后面提到的ldconfig
后,我试了一下,并且它工作。
sudo ldconfig
我可能已经能够通过重新启动apache或硬件来完成同样的事情,但是我本人无法做到这一点。
如果您尝试上传包含最新版本名称中冒号的文件,您也会收到此错误消息。
通常它有助于指定识别命令的path..
Paperclip.options[:command_path] = "/your/path/to/identify"
..其他人提到。 但是,如果版本不匹配,也可能会出现问题,我最近更新了应用程序的Ruby-on-Rails版本(Rails 3.1.10),但忘记更新回形针gem。 我更新回形针版本到2.8.0后,再次工作。
如果您正在尝试上传video,那么“标识”尝试将工作委托给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从validation错误列表中删除了错误信息
只是说,你也可以有这个错误信息的意思。
在我的情况下,文件的大小是0字节的长度,因为我忘记从Zip中写入后将其刷新,并将此资源传递给Paperclip。
在阅读这个线程的其他答案之前,检查一下您是否可以使用您的首选查看器打开该文件可能很有趣
如果你是一个mac用户,这只是一个问题,因为更新你的操作系统到10.8,那么这可能是一个X11的问题,这里概述http://support.apple.com/kb/HT5293
确定〜/path/到/图像
甚至在尝试所有上述修复之后,仍然不适合我。 我从http://xquartz.macosforge.org/landing/安装了XQuartz,现在又重新开始了。;
也可以帮助别人…
这也发生在我身上,我尝试了上面提到的所有方法。 我只是改变回形针的版本,然后一切正常。
我在使用OSX + MAMP + Passenger + Paperclip时遇到了这个问题,在设置好command_path并确保imagemagick已经通过brew正确安装后,为乘客正确设置了temp和upload目录为可写,仍然不起作用!
解决的办法是在/ Applications / MAMP / Library / bin / envvars中编辑MAMP的envvars文件,并注释掉导出的DYLD_LIBRARY_PATH行。
也就是改变说的那一行
export DYLD_LIBRARY_PATH
至
# export DYLD_LIBRARY_PATH
然后重新启动MAMP,感觉当你的图像正确上传/resize时的兴高采烈。