2015-07-15 5 views
8

alle.Rails Büroklammer Fehler `AWS :: S3 :: Fehler :: BadRequest` auf` exists? `Und` clear`

Ich habe alles gut funktioniert: Bilder hochgeladen werden und können via Web mit Büroklammer und S3 zugegriffen werden, außer wenn ich log in rails c und so etwas wie dieses geben:

> User.first.avatar.exists? 
[AWS S3 400 0.093287 0 retries] head_object(:bucket_name=>"mozg-staging-static",:key=>"users/avatars/000/000/001/original/289736.jpg") AWS::S3::Errors::BadRequest AWS::S3::Errors::BadRequest 

=> false 

Dasselbe mit der clear Methode. Bisher keine Lösung gefunden.

Ich habe diese Erlaubnis Politik:

{ 
      "Sid": "Stmt1436958517000", 
      "Effect": "Allow", 
      "Action": [ 
       "s3:AbortMultipartUpload", 
       "s3:DeleteObject", 
       "s3:DeleteObjectVersion", 
       "s3:GetBucketAcl", 
       "s3:GetBucketCORS", 
       "s3:GetObject", 
       "s3:GetObjectAcl", 
       "s3:GetObjectVersion", 
       "s3:GetObjectVersionAcl", 
       "s3:ListBucket", 
       "s3:ListBucketMultipartUploads", 
       "s3:ListBucketVersions", 
       "s3:ListMultipartUploadParts", 
       "s3:ListObjects", 
       "s3:PutObject", 
       "s3:PutObjectAcl", 
       "s3:PutObjectVersionAcl", 
       "s3:RestoreObject" 
      ], 
      "Resource": [ 
       "arn:aws:s3:::mozg-staging-static", 
       "arn:aws:s3:::mozg-staging-static/*" 
      ] 
     } 

Danke für die Unterstützung.

+0

Welche Version der Büroklammer? Welche Version von aws-SDK? Gibt es "exists" und "clear", wenn ein Server ausgeführt wird, obwohl sie nicht in der Konsole funktionieren? (d. h. die Zeile, die Sie in der Konsole ausgeführt haben, zu einem Controller hinzufügen - protokolliert sie denselben Fehler?) –

Antwort

0

Dies könnte ein Problem mit Ihrer Politik sein, können Sie versuchen:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
    { 
     "Effect": "Allow", 
     "Action": [ 
      "s3:ListBucket" 
     ], 
     "Resource": ["arn:aws:s3:::mozg-staging-static"] 
    }, 
    { 
     "Effect": "Allow", 
     "Action": [ 
     "s3:PutObject", 
     "s3:GetObject", 
     "s3:DeleteObject" 
     ], 
     "Resource": ["arn:aws:s3:::mozg-staging-static/*"] 
    } 
    ] 
} 

Die ListBucket Aktion muss auf einem Eimer Ebene festgelegt werden, während der PutObject, GetObject und DeleteObject Bedarf in Satz gegen Objekte wird der Eimer. Ich habe die anderen Aktionen ausgelassen, um die Antwort kurz zu halten. Sie müssen sie natürlich wieder hinzufügen, wenn sie benötigt werden. Sie können eine Liste von Aktionen finden und ob sie Bucket- oder Objektaktionen sind: http://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html