奇怪的回形针错误消息

我有一个使用Paperclip 2.3.8的Rails 3应用程序。 我在我的模型中指定了以下内容:

validates_attachment_content_type :file, :content_type => ['image/jpeg', 'image/png', 'image/gif', 'image/pjpeg', 'image/x-png'], :message => 'Not a valid image file.' 

但是,当我测试虚假上传时,而不是“不是有效的图像文件”。 我收到这个奇怪的错误消息:

 /var/folders/cs/cs-jiL3ZH1WOkgLrcqa5Ck+++TI/-Tmp-/stream20110404-43533-vm7eza.pdf is not recognized by the 'identify' command. 

任何想法在这里出了什么问题?

– 编辑 –

对于它的价值,我已经从评论中提到的类似问题中覆盖了ImageMagick / Rmagick的步骤(谢谢fl00r!)。

我发生的一件事(现在我正在追踪它是一个ImageMagick错误)是我在这个图像附件上有一个水印处理器。

那么,也许它试图在尝试validation之前尝试使用水印处理器, 就是错误消息的来源?

– 编辑 –

我尝试删除处理器并没有更改错误消息…所以,不知道接下来要尝试什么。

– 编辑 –

:)按照要求,这是整个模型。

 require 'paperclip_processors/watermark' class Attachment  [:watermark], :styles => { :full => "960", :half => "470", :third => "306", :fourth => "225", :fifth => "176x132#", :tile => "176x158>", :sixth => "145x109#", :eighth => "106x80#", :tenth => "87x65#", :marked => { :geometry => "470", :watermark_path => "#{Rails.root}/public/images/watermark.png", :position => 'Center' } }, :storage => :s3, :s3_credentials => "#{Rails.root}/config/s3.yml", :path => "photos/:user_id/:id/:username_:id_:style.:extension" # VALIDATIONS validates_attachment_presence :file validates_attachment_content_type :file, :content_type => ['image/jpeg', 'image/png', 'image/gif', 'image/pjpeg', 'image/x-png'], :message => 'Not a valid image file.' validate :file_dimensions, :unless => "errors.any?" # CUSTOM VALIDATIONS def file_dimensions dimensions = Paperclip::Geometry.from_file(file.to_file(:original)) self.width = dimensions.width self.height = dimensions.height if dimensions.width < 1600 && dimensions.height  nil ) end end 

我想我弄明白了这个问题。

尝试从模型中删除:styles ,您将看到'identify' error message发生,模型按预期validation。

问题是Paperclip正在处理样式,即使content_typevalidation失败。 它会尝试将您的pdf作为图像处理,然后您会收到错误:

 /var/folders/cs/cs-jiL3ZH1WOkgLrcqa5Ck+++TI/-Tmp-/stream20110404-43533-vm7eza.pdf is not recognized by the 'identify' command. 

解决方案是在validation失败时跳过处理,方法是将其添加到模型中:

 before_post_process :skip_if_invalid def skip_if_invalid return false unless self.valid? end 

这样Paperclip就不会尝试将不是图像的文件转换为缩略图:)

这不奇怪。 这是回形针最常见的错误。 实际上,它不是关于回形针,而是关于ImageMagick。

  1. 你安装了ImageMagick吗?
  2. 你是否通过初始化程序添加了image_magick command_path?

如果您现在已经错过IM,请查看其位置:

 which identify #=> it will return some path 

在Rails应用程序config/initializers/paperclip.rb创建新文件:

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

您还可以在has_attached_file添加:whiny => false选项

 has_attached_file :picture, :styles => { ... }, :whiny => false 

如果出现问题,它不会抛出任何错误

如果您想将图片和文件存储在一个模型中并想要忽略非图像文件的样式,也可以在此处阅读:

回形针仅处理图像