web-dev-qa-db-fra.com

Ruby on Rails - Erreur de trombone

Pour référence, j'ai suivi ce tutoriel: https://devcenter.heroku.com/articles/Paperclip-s3 Sauf que je suis en train de tester localhost en ce moment, j'ai donc installé la gem Figaro et placé mes informations S3 dans l'application .yml.

Utilisation de Rails v4, Cocaine v0.5.3 et Paperclip v4.1.0 (ne sait pas s’il est nécessaire de mentionner d’autres numéros de version de gem).

J'ai un modèle appelé SubmissionDetails, où, dans son nouveau fichier .html.erb, j'essaie de télécharger un fichier jpg dans une colonne appelée pièce jointe. Voici le code de modèle pertinent:

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

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

Lorsque j'essaie de télécharger un fichier jpg, il retourne au formulaire avec le message d'erreur suivant:

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

Je comprends une partie de l’erreur, ce texte pour afficher ce message d’erreur est absent de mon fichier en.yml, mais qu’en est-il de cette partie de type de média usurpée?

Cela apparaît dans la console de mon serveur, ne sachant pas si cela est pertinent:

[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

Ce message est généré par une vérification de validation de l'usurpation de contenu.

Pour Paperclip v.4, cela génère un bogue https://github.com/thoughtbot/Paperclip/issues/1429

Alors que pour Paperclip v.3, il semble qu'il jette juste un avertissement de dépréciation, https://github.com/thoughtbot/Paperclip/issues/1423

J'attendais donc que l'équipe de Paperclip résolve ce problème avant d'utiliser la version 4. Pour le moment, je préfère continuer à utiliser la version 3.

gem "Paperclip", "~> 3.5.3"

Ou ajoutez ceci à un initialiseur pour désactiver la protection contre l'usurpation d'identité:

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

voir Impossible de télécharger une image avec Paperclip 4.0 Rails 3

41
Mini John

Comme expliqué récemment dans les commentaires du numéro ( https://github.com/thoughtbot/Paperclip/issues/1429#issuecomment-49821032 ), en ajoutant:

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

to config/initializers/Paperclip.rb a résolu le problème.

8
ZeDalaye

Sur le même problème, j'ai trouvé une autre solution de contournement qui peut être appliquée au niveau du modèle, sans modifier d'initialisateur:

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

Fondamentalement, cela ignore les validations media_type et content_type pour éviter les erreurs d'usurpation sur les pièces jointes PaperclipModel. Pour plus de détails, voir ici .

0
Daniel Batalla