web-dev-qa-db-ja.com

Ruby on Rails-ペーパークリップエラー

参考までに、私はこのチュートリアルに従っています: https://devcenter.heroku.com/articles/Paperclip-s 現在ローカルホストテストを行っている場合を除いて、Figaro gemをインストールし、S3を配置しました。 application.ymlの情報。

Rails v4、Cocaine v0.5.3、およびPaperclip v4.1.0を使用します(他のgemバージョン番号を記載する必要があるかどうかは不明です)。

SubmissionDetailsというモデルがあり、そのnew.html.erbで、attachmentという列にjpgをアップロードしようとしています。関連するモデルコードは次のとおりです。

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
15
Rachel9494

このメッセージは、コンテンツのなりすましの検証チェックによって発生します。

Paperclip v.4の場合、これによりバグが発生します https://github.com/thoughtbot/Paperclip/issues/1429

Paperclip v.3の場合、非推奨の警告がスローされるようです https://github.com/thoughtbot/Paperclip/issues/142

したがって、バージョン4を使用する前に、Paperclipチームがこのバグを解決するのを待ちます。現時点では、バージョン3を使い続けたいと思います。

gem "Paperclip", "~> 3.5.3"

または、これを初期化子に追加して、なりすまし保護を無効にします。

config/initializers/Paperclip_media_type_spoof_detector_override.rb

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

Paperclip4.0を使用して画像をアップロードできませんRails

42
Mini John

問題のコメントで最近説明されているように( https://github.com/thoughtbot/Paperclip/issues/1429#issuecomment-49821032 )、追加:

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

config/initializers/Paperclip.rbにアクセスすると、問題が解決しました。

8
ZeDalaye

同じ問題で、初期化子を編集せずにモデルレベルで適用できる別の回避策を見つけました。

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_typeおよびcontent_typePaperclipModel添付ファイルでのなりすましエラーを回避するための検証。詳細については、 ここ を参照してください。

0
Daniel Batalla