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

kgp*_*per 5 ruby ruby-on-rails 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.
Run Code Online (Sandbox Code Playgroud)

服务器细节:Ubuntu和Debian

它将结果标识为/ usr/bin/identify

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

Paperclip.options[:command_path] = "/usr/bin"
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

我查看了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
Run Code Online (Sandbox Code Playgroud)

如果有人解决了同样的问题,请告诉我.非常感谢.

Rob*_*nes 2

我遇到了同样的问题 - 回形针代码没有错误。

在我的设置中,我在 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
Run Code Online (Sandbox Code Playgroud)

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

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

Paperclip.options[:command_path] = "/usr/local/ImageMagick-6.6.1/bin"
Run Code Online (Sandbox Code Playgroud)

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

3:确定需要这两个导出的环境变量 - 并且 Apache/Passenger(或其他可能的 Web 服务器)默认情况下不会传递这些变量!在您的乘客虚拟主机文件中添加以下行:

  SetEnv MAGICK_HOME /usr/local/ImageMagick-6.6.1
  SetEnv DYLD_LIBRARY_PATH /usr/local/ImageMagick-6.6.1/lib
Run Code Online (Sandbox Code Playgroud)

重新启动 apache/passenger 就可以了

祝你好运!