我正在使用Prawn从Rails应用程序的控制器生成PDF文件。
...
respond_to do |format|
format.pdf do
pdf = GenerateReportPdf.new(@object, view_context)
send_data pdf.render, filename: "Report", type: "application/pdf", disposition: "inline"
end
end
这个功能运作良好,但我现在想将GenerateReportPdf移入后台任务,并将生成的对象传递给Carrierwave直接上传到S3。
worker看起来像这样
def perform
pdf = GenerateReportPdf.new(@object)
fileString = ???????
document = Document.new(
object_id: @object.id,
file: fileString )
# file is field used by Carrierwave
end
我该如何处理Prawn返回的对象(?????
),以确保它是Carrierwave可以读取的格式。
fileString = pdf.render_file 'filename'
将该对象写入应用的根目录。由于我在Heroku上,这不可能实现。
file = pdf.render
返回 ArgumentError: string contains null byte
fileString = StringIO.new( pdf.render_file 'filename' )
返回 TypeError: no implicit conversion of nil into String
fileString = StringIO.new( pdf.render )
返回 ActiveRecord::RecordInvalid: Validation failed: File You are not allowed to upload nil files, allowed types: jpg, jpeg, gif, png, pdf, doc, docx, xls, xlsx
fileString = File.open( pdf.render )
返回 ArgumentError: string contains null byte
......等等。
我漏掉了什么?StringIO.new( pdf.render )
似乎应该可行,但我不清楚为什么会生成此错误。