Ruby on Rails - Paperclip错误

时间:2014-02-20 15:32:22

标签: ruby-on-rails paperclip

作为参考我一直在学习本教程:https://devcenter.heroku.com/articles/paperclip-s3除了我现在正在进行localhost测试,所以我安装了Figaro gem并将我的S3信息放在application.yml中。

使用Rails v4,Cocaine v0.5.3和Paperclip v4.1.0(不确定是否需要提及任何其他宝石版本号)。

我有一个名为SubmissionDetails的模型,在new.html.erb中我试图将jpg上传到名为attachment的列。以下是相关的型号代码:

has_attached_file :attachment, styles: {
thumb: '200x200>',
large: '800x800>'
}

validates_attachment_content_type :attachment, content_type: /\Aimage\/.*\Z/

当我尝试上传jpg时,它会返回到表单,并显示以下错误消息:

1 error prohibited this submission_detail from being saved:
Attachment translation missing:
en.activerecord.errors.models.submission_detail.attributes.attachment.spoofed_media_type

我理解了一些错误,我的en.yml文件中缺少显示此错误消息的文本,但那个欺骗媒体类型部分呢?

这显示在我的服务器控制台中,不确定这是否相关:

[paperclip] Content Type Spoof: Filename header.jpg (["image/jpeg"]), content type discovered from file command: . See documentation to allow this combination.
(0.0ms)  rollback transaction

3 个答案:

答案 0 :(得分:41)

通过内容欺骗的验证检查引发该消息。

对于Paperclip v.4,这会产生错误https://github.com/thoughtbot/paperclip/issues/1429

对于Paperclip v.3,它似乎只是抛出了弃用警告,https://github.com/thoughtbot/paperclip/issues/1423

所以我等待Paperclip团队在使用版本4之前解决这个错误。目前我宁愿继续使用版本3.

gem "paperclip", "~> 3.5.3"

或者将其添加到初始化程序以禁用欺骗保护:

配置/初始化/ paperclip_media_type_spoof_detector_override.rb

require 'paperclip/media_type_spoof_detector'
module Paperclip
  class MediaTypeSpoofDetector
    def spoofed?
      false
    end
  end
end

请参阅Can't upload image using Paperclip 4.0 Rails 3

答案 1 :(得分:8)

正如最近在该问题的评论(https://github.com/thoughtbot/paperclip/issues/1429#issuecomment-49821032)中所解释的那样,添加:

Paperclip.options[:command_path] = '/usr/bin'

config / initializers / paperclip.rb解决了这个问题。

答案 2 :(得分:0)

在同一问题上,我发现了另一种可在模型级别应用的解决方法,而无需编辑任何初始化程序:

class PaperclipModel < ActiveRecord::Base
  has_attached_file :attachment, { validate_media_type: false }

  validates_attachment :attachment, {
    # tweak as desired
    content_type: { content_type: ["text/csv", "text/plain", Paperclip::ContentTypeDetector::SENSIBLE_DEFAULT] }
  }
end

基本上,此跳过media_typecontent_type验证以避免对PaperclipModel附件的欺骗性错误。有关更多详细信息,请参见here