Я мигрирую из Paperclip весь мой процесс загрузки и у меня возникла проблема с созданным PDF.
Дочерняя модель, которая обрабатывает загрузку, - это полиморфная модель с именем quotepdf
В какой-то моментquotepdf
экземпляр генерируется и имеет привязанное к нему вложение.
Вот модель quotepdf, адаптированная для святыни
class Quotepdf < ApplicationRecord
include QuotesAndInvoicesUploader::Attachment.new(:quote)
belongs_to :quotable, polymorphic: true
end
загрузчик:
class QuotesAndInvoicesUploader < Shrine
plugin :validation_helpers # to validate pdf
plugin :delete_raw
Attacher.validate do
validate_max_size 1.megabyte
validate_mime_type_inclusion ['application/pdf']
end
def generate_location(io, context)
type = context[:record].class.name.downcase if context[:record]
name = super
[type, name].compact.join("/")
end
end
иработник Sidekiq, который обрабатывает создание 'quotepdf record' и PDF-вложения с помощью Wickedpdf:
class PhotographerQuotePdfWorker
include Sidekiq::Worker
sidekiq_options retry: false
def perform(id)
@quote = Photographerquote.find(id)
ac = ActionController::Base.new()
pdf_string = ac.render_to_string pdf: 'photographerquote-'+@quote.hashed_id.to_s, template: "photographerquote/print_quote.pdf.erb", encoding: "UTF-8", locals: {pdfquote: @quote}
new_pdf = @quote.build_quotepdf
new_pdf.quote = StringIO.new(pdf_string)
new_pdf.save
end
end
С Paperclip он работал нормально.Хотя в shrine ничего не сохраняется в столбце «quote_data» новой записи «quotepdf».Работник также не возвращает ошибок.
Кэшированный файл действительно загружен в корзину S3, поэтому файл PDF сгенерирован правильно.Окончательный файл отсутствует.
РЕДАКТИРОВАТЬ
заработал, раздев мой загрузчик:
class QuotesAndInvoicesUploader < Shrine
def generate_location(io, context)
type = context[:record].class.name.downcase if context[:record]
name = super
[type, name].compact.join("/")
end
end
Но я не понимаю, почемуранее это не удавалось: файл размером всего 22 КБ и действительно PDF.Не может быть проблемы с проверкой ..
РЕДАКТИРОВАТЬ 2
Хорошо, обнаруженный миметип действительно null
{"id":"devispdf/04aa04646f73a3710511f851200a2895","storage":"store","metadata":{"filename":null,"size":21613,"mime_type":null}}
Хотя мой инициализатор имеет Shrine.plugin :determine_mime_type