2015-07-15 2 views
8

все.Ошибка Rails paperclip `AWS :: S3 :: Ошибки :: BadRequest` на` существуют? `И` clear`

У меня все работает нормально: изображения загружаются и могут быть доступны через Интернет с скрепку и S3, за исключением того, когда я вхожу в rails c и ввести что-то вроде этого:

> 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 

То же самое с методом clear. Пока не найдено решения.

У меня есть это разрешение политики:

{ 
      "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/*" 
      ] 
     } 

Спасибо за поддержку.

+0

Какая версия скрепки? Какая версия aws-sdk? «' '' '' '' И 'clear' работают при запуске сервера, даже если они не работают в консоли? (т. е. добавьте эту строку, которую вы запускали в консоли, где-то в контроллере - она ​​регистрирует ту же ошибку?) –

ответ

0

Это может быть проблема с вашей политикой, вы можете попробовать:

{ 
    "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/*"] 
    } 
    ] 
} 

ListBucket действие должно быть установлено на уровне ковша, в то время как PutObject, GetObject и DeleteObject нужно установить против объектов ведро. Я оставил другие действия, чтобы ответить на короткий вопрос. Разумеется, вам нужно будет добавить их обратно, если они потребуются. Список действий можно найти здесь: http://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html

Смежные вопросы