2015-09-09 116 views
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」 - 如果尺寸較小。

感謝您的幫助!

回答

0

在這個時間點:

@obj = @bucket.objects['filename'].write(pdf, acl: :public_read) 

pdfCombinePDF對象,而不是FileString,或Pathname

pdf.to_s可能的工作,否則你就必須創建從一個新的文件CombinePDF對象

File.new(CombinePDF) # pseduo code only 
+0

感謝您的幫助。 pdf.to_s不起作用。不知道如何編寫File.new行 - 我會試着研究它。 – Reddirt

+0

我得到它使用file = Tempfile.new('costprojects.pdf') – Reddirt

相關問題