去除Paperclip引起的不必要错误 - 文件名未被“identify”命令识别

5

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

用户模型:

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/bin/identify

指定命令路径不能解决问题:

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个回答

2
我遇到了同样的问题 - Paperclip代码没有问题。
在我的设置中,我使用MacOSX,并在/usr/local/ImageMagick-6.6.1/bin中下载了ImageMagick二进制文件,同时在Apache/Passenger下运行Rails。我已经安装了Paperclip插件。
需要完成3个步骤才能使其正常工作:
1:确保您在UNIX命令行级别上使用ImageMagick。这涉及将其添加到您的路径并导出这些环境变量(当然要指向您的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,您会发现‘identify’从Paperclip中运行,但无法识别该文件... 最后一步是...

3: Identify需要这两个导出的环境变量-而Apache / Passenger(或其他Web服务器)默认情况下不会传递它们! 在您的passenger虚拟主机文件中添加以下行:

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

重新启动apache/passenger服务,然后它就能正常工作了。
祝好运!

1
是的,我想重启Apache应该可以解决问题。但在Dreamhost上不行。我们同时使用共享服务器和VPS服务器。当然,在VPS上运行良好。 - kgpdeveloper
这对我解决了问题,谢谢!在更改相关的 environment.rb 文件后,别忘了重新启动服务器。 - gef

1

您应该安装了提供identify命令的imagemagick,并且其路径必须在运行rails的用户的$PATH变量中。

它被paperclip用于缩放和图像处理选项,但它没有被记录为依赖项,因为如果您接受原始图像,您“可以”在没有它的情况下使用paperclip。

希望这有所帮助。


我将 /usr/bin 添加到路径中,但仍然没有运气。但是我通过不使用 <%= error_messages_for :user %> 来解决了这个问题,我正在使用 <%@user.messages.each_full{|msg| do something } %>。 - kgpdeveloper
你在进行类型验证之前上传了那张图片吗?可能是一个txt文件吗?这种情况会发生在新文件中吗? - Oinak


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