2012-04-12 7 views
2

Ich versuche, ein PDF zu AWS S3, das in einem Hintergrundprozess generiert wird, zu laden. Der Fehler, den ich bekomme, ist ein wenig kryptisch und ich hatte gehofft, dass jemand in diese Sache geraten ist oder vielleicht in der Lage sein könnte, mich in die richtige Richtung zu führen. Ich benutze Büroklammer in anderen Teilen der Anwendung, aber diese nehmen Formulardaten, wo, wie dies ein PDF erstellt und speichert es in einem lokalen Temp-Verzeichnis vor dem Hochladen.AWS :: S3 :: Fehler :: InvalidArgument mit Paperclip PDF Upload

Relevante Edelsteine:

  • Rails 3.0.9
  • Büroklammer 2.7.0
  • aws-sdk 1.3.9

Code:

MyDownload < ActiveRecord::Base 
    has_attached_file :download, 
    storage: :s3, 
    default_style: :original, 
    s3_permissions: 'authenticated_read', 
    s3_credentials: "#{Rails.root}/config/s3.yml", 
    bucket: S3_BUCKET, 
    path: ":class/:attachment/:id/:style/:filename", 
    s3_protocol: 'https' 

    validates_attachment_content_type :download, content_type: [/application\/(x\-)?pdf/i] 
    validates_attachment_presence :download 

end 

Während meiner Hintergrundprozess Ich weiß, dass das PDF generiert wird und angezeigt werden kann ed bei tmp_path. Hier ist ein wenig von der Code Ich verwende:

PDFKit.new(report_content).to_file(tmp_path) 
obj = MyDownload.new(date: Date.today) 
obj.download = File.new(tmp_path) 

obj.valid? # returns true 

aber es funktioniert nicht, wenn ich tun:

obj.save! 

(AWS::S3::Errors::InvalidArgument) 
    (eval):3:in `put_object' 
+0

Wenn ich 's3_permissions' in': private' ändere, funktioniert es. Ich habe keine Ahnung, ob das das Gleiche ist. –

Antwort

8

Es stellt sich heraus, dass mit dem aws-sdk gem Schalten erfordert die s3_permissions Option sei ein Symbol. Durch Ändern von 'authenticated_read' in :authenticated_read wird das Problem behoben.

+0

Danke für diesen kleinen Tipp. Meine Kopfschmerzen werden verschwinden, jetzt wo ich aufhören kann, meinen Kopf gegen die Wand zu schlagen. – memoht