0
我有一个使用gem'wicked_pdf'和gem'combine_pdf'的Rails 3.2应用程序。 他们都工作,我可以创建通过电子邮件发送的PDF。Rails将pdf保存到Amazon S3
但是,我遇到了电子邮件太大的情况。
所以,我试图将创建的pdf保存到Amazon S3。该应用程序已经有宝石'aws-sdk'。
这是我的代码:
def self.saveallpdf
@costprojects = Costproject.where("client_id = 2")
pdf = CombinePDF.new
@costprojects.each do |costproject|
@costproject = costproject
controller = CostprojectsController.new
controller.instance_variable_set(:"@costproject", @costproject)
pdf2 = controller.render_to_string(pdf: "Captital Projects.pdf",
template: "costprojects/viewproject",
encoding: "UTF-8")
pdf << CombinePDF.parse(pdf2)
end
@s3 = AWS::S3.new
@bucket = @s3.buckets['ndeavor3-pdf']
@obj = @bucket.objects['filename'].write(pdf, acl: :public_read)
end
我得到的错误是:
:data must be provided as a String, Pathname, File, or an object that responds to #read and #eof?
/app/vendor/bundle/ruby/1.9.1/gems/aws-sdk-1.8.3.1/lib/aws/s3/data_options.rb:125:in `validate_data!'
/app/vendor/bundle/ruby/1.9.1/gems/aws-sdk-1.8.3.1/lib/aws/s3/data_options.rb:32:in `compute_write_options'
/app/vendor/bundle/ruby/1.9.1/gems/aws-sdk-1.8.3.1/lib/aws/s3/s3_object.rb:594:in `write'
/app/app/models/costproject.rb:167:in `saveallpdf
'
我猜是-SDK不喜欢的 “PDF” 作为文件??
PS - 我可以通过电子邮件发送“pdf” - 如果尺寸较小。
感谢您的帮助!
感谢您的帮助。 pdf.to_s不起作用。不知道如何编写File.new行 - 我会试着研究它。 – Reddirt
我得到它使用file = Tempfile.new('costprojects.pdf') – Reddirt