Active Storage - ошибка в инициализаторе не работает - PullRequest
0 голосов
/ 09 октября 2018

Я пытаюсь обойти известную проблему в Active Storage, когда тип MIME хранимого файла установлен неправильно, без возможности переопределить его.

https://github.com/rails/rails/issues/32632

Эта проблема была решена в ветке master Rails, однако, похоже, она еще не выпущена (проект в настоящее время использует 5.2.0).Поэтому я пытаюсь обойти проблему, используя один из комментариев, приведенных в номере:

В новом инициализаторе (\config\initializers\active_record_fix.rb):

Rails.application.config.after_initialize do
  # Defeat the ActiveStorage MIME type detection.
  ActiveStorage::Blob.class_eval do
    def extract_content_type(io)
      return content_type if content_type
      Marcel::MimeType.for io, name: filename.to_s, declared_type: content_type
    end
  end
end

Я обрабатываю ихранение zip-файла в фоновом режиме с использованием delayed_jobs.Похоже, инициализатор не вызывается.Я перезапустил сервер.Я запускаю проект локально, используя heroku local для обработки фоновых заданий.

Вот код, хранящий файл:

file.attach(io: File.open(temp_zip_path), filename: 'Download.zip', content_type: 'application/zip')

Есть идеи, почему код выше не работает?Active Storage предпочитает случайным образом решить, что этот ZIP-файл является PDF-файлом, и сохранить тип содержимого как application\pdf.Не связано, попытка вручную переопределить content_type после присоединения не работает:

file.content_type = 'application/zip'
file.save # No errors, but record doesn't update the content_type

1 Ответ

0 голосов
/ 02 февраля 2019

Попробуйте с Rails.application.config.to_prepare вместо after_initialize события инициализации.

больше информации:

...