0

运行 Spree 示例数据时出现错误。当 Spree 尝试加载产品数据,特别是产品图像时,就会发生这种情况。这是我得到的错误:

* Execute db:load_file
loading ruby <GEM DIR>/sample/lib/tasks/../../db/sample/spree/products.rb
-- Processing image: ror_tote.jpeg
rake aborted!
/var/folders/91/63kgbtds2czgp0skw3f8190r0000gn/T/ror_tote.jpeg20121007-21549-2rktq1 is not recognized by the 'identify' command.
<GEM DIR>/paperclip-2.7.1/lib/paperclip/geometry.rb:31:in `from_file'
<GEM DIR>/spree/core/app/models/spree/image.rb:35:in `find_dimensions'

我已经确保 ImageMagick 安装正确,就像以前我遇到的问题一样。这是直接运行 identify 命令时得到的输出。

$ identify
Version: ImageMagick 6.7.7-6 2012-10-06 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2012 ImageMagick Studio LLC
Features:  OpenCL 
... other usage info omitted ...

我还将 pry 与 pry-debugger 一起使用,并在 Paperclip 内的 geometry.rb 中放置了一个断点。这是geometry.rb的那个部分的样子:

# Uses ImageMagick to determing the dimensions of a file, passed in as either a
# File or path.
# NOTE: (race cond) Do not reassign the 'file' variable inside this method as it is likely to be
# a Tempfile object, which would be eligible for file deletion when no longer referenced.
def self.from_file file
  file_path = file.respond_to?(:path) ? file.path : file
  raise(Errors::NotIdentifiedByImageMagickError.new("Cannot find the geometry of a file with a blank name")) if file_path.blank?
  geometry = begin
               silence_stream(STDERR) do
                 binding.pry
                 Paperclip.run("identify", "-format %wx%h :file", :file => "#{file_path}[0]")
               end
             rescue Cocaine::ExitStatusError
               ""
             rescue Cocaine::CommandNotFoundError => e
               raise Errors::CommandNotFoundError.new("Could not run the `identify` command. Please install ImageMagick.")
             end
  parse(geometry) ||
    raise(Errors::NotIdentifiedByImageMagickError.new("#{file_path} is not recognized by the 'identify' command."))
end

在我的 binding.pry 语句中,file_path 变量设置为以下内容:

file_path => "/var/folders/91/63kgbtds2czgp0skw3f8190r0000gn/T/ror_tote.jpeg20121007-22732-1ctl1g1" 

我还通过在此目录中打开我的查找器并使用预览应用程序打开它来仔细检查它是否存在;并且该程序可以通过%x{identify}在 pry 中运行来运行识别,并且我收到与Version: ImageMagick 6.7.7-6 2012-10-06 Q16以前相同的版本。

在文件扩展名之后删除额外的数字(这是时间戳吗?)并在 Pry 中手动运行 Paperclip.run 命令会给我一个不同的错误:

Cocaine::ExitStatusError: Command 'identify -format %wx%h :file' returned 1. Expected 0

我还尝试将 Spree 中的 Paperclip gem 手动更新到 3.0.2,但仍然出现相同的错误。所以,我真的不确定还有什么可以尝试的。我的 ImageMagick 设置仍然有问题吗?

4

1 回答 1

3

如此处所述,新的 Cocaine gem 改变了使用的 API,打破了旧的 Paperclip gem。我通过在我的 Gemfile 中明确要求 0.3.2 版可卡因解决了这个问题,但我也刚刚注意到,自从我发布这个问题以来,Spree master 分支也添加了这个要求,所以不再需要这个。

gem 'cocaine', '0.3.2' 
于 2012-10-08T07:00:03.133 回答