Я пытаюсь обойти известную проблему в 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