Ruby on Rails - ошибка скрепки
Для справки я следую этому руководству: https://devcenter.heroku.com/articles/paperclip-s3 За исключением того, что я сейчас тестирую локальное хостинг, поэтому я установил драгоценный камень Figaro и поместил мою информацию S3 в application.yml.
Использование Rails v4, Cocaine v0.5.3 и Paperclip v4.1.0 (не знаю, нужно ли упоминать другие номера версий gem).
У меня есть модель под названием 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
Ответы
Ответ 1
Это сообщение поднято проверкой проверки для подмены содержимого.
Для 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
см. Невозможно загрузить изображение, используя "Резервуары для копий 4"
Ответ 2
Как объясняется недавно в комментариях к проблеме (https://github.com/thoughtbot/paperclip/issues/1429#issuecomment-49821032), добавив:
Paperclip.options[:command_path] = '/usr/bin'
для config/initializers/paperclip.rb решена проблема.