2

バックグラウンドプロセスで生成されたPDFをAWSS3にアップロードしようとしています。私が得ているエラーは少し不可解であり、誰かがこれに遭遇したか、正しい方向に私を導くことができるかもしれないことを望んでいました。アプリケーションの他の部分でペーパークリップを使用していますが、これらはフォームデータを取得しており、PDFを作成し、アップロードする前にローカルの一時ディレクトリに保存しています。

関連する宝石:

  • Rails 3.0.9
  • ペーパークリップ2.7.0
  • aws-sdk 1.3.9

コード:

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

バックグラウンドプロセス中に、PDFが生成され、tmp_pathで表示できることがわかりました。これが私が使用しているコードの少しです:

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

obj.valid? # returns true

しかし、私がそうすると失敗します:

obj.save!

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

1 に答える 1

8

aws-sdk gemに切り替えるには、s3_permissionsオプションをシンボルにする必要があることがわかりました。'authenticated_read'問題を:authenticated_read修正するために変更します。

于 2012-04-13T14:28:35.167 に答える