2011-03-04 2 views
4

모든 엄지 손가락을 다시 만들려고합니다. 왜 키가 존재하지 않는다고 말하는지는 모르겠다. 나는 AWS-S3가 제대로 구성되어 있으며 (나는 아무런 문제없이 사진을 업로드 할 수 있습니다.)엄지를 다시 생성 할 때 클립 클립 문제

>> Attachment.all.each {|x|x.attachment.reprocess!} 
AWS::S3::NoSuchKey: The specified key does not exist. 
    /app/d999782b-a789-4763-ac86-e8c65fa781eb/home/.bundle/gems/ruby/1.8/gems/aws-s3- 0.6.2/lib/aws/s3/error.rb:38:in `raise' 
/app/d999782b-a789-4763-ac86-e8c65fa781eb/home/.bundle/gems/ruby/1.8/gems/aws-s3-0.6.2/lib/aws/s3/base.rb:72:in `request' 
/app/d999782b-a789-4763-ac86-e8c65fa781eb/home/.bundle/gems/ruby/1.8/gems/aws-s3-0.6.2/lib/aws/s3/base.rb:88:in `get' 
/app/d999782b-a789-4763-ac86-e8c65fa781eb/home/.bundle/gems/ruby/1.8/gems/aws-s3-0.6.2/lib/aws/s3/object.rb:134:in `value' 

나는 하나의 객체에 동일 잘 할 것 같다하려고 노력하면 잘 작동, 그래서 문제에 보인다 컬렉션으로 생성하는 것과 관련이있다.

>> Attachment.last.attachment.reprocess! 
=> true 

업데이트 :이 같은 유효한 이미지 파일이어야한다 .HTM로 업로드 된 파일이 있다는 사실에 관련이 확신 해요. 어떤 생각을 어떻게 무시할 수 있습니까?

+2

시도가 일부 로그 정보, Attachment.all.each를 {추가 | X | Rails.logger.error "# {x.id} 처리 중"; x.attachment.reprocess!}. 또는 간단한 사용 콘솔에 넣습니다. 어쩌면 누락 된 자산 일 수 있습니다. – andrea

+0

나는 똑같은 문제를 겪고 있고 그 중 하나를 찾아 낼 수 없었습니다 ... – Andrew

+0

Martin - Harald의 대답이 저를 위해 풀었습니다. 당신에게 해답을 줄 수 있어야합니다. – Andrew

답변

9

확실하지 않지만 이것이 도움이되기를 바랍니다.

Attachment.all.each { |x| x.attachment.reprocess! if ['.jpeg','.jpg','.png','.gif'].include?(File.extname(file_name))} 

file_name => Name of the uploaded file

당신은 AWS-S3에 대한 키를 넣어 한 행운

최고의
1

유효성 검사가 어떻게 설정되어 있는지 알 수 없지만 일부 첨부 파일 객체에 빈 첨부 파일이있을 수 있습니까? 그렇다면, 시도 대신

rake paperclip:refresh 

:

Attachment.all.each { |x| x.attachment.reprocess! rescue nil } 
+0

그건 작동하지 않습니다. 반환 된 모든 객체를 표시하지만 축소판을 다시 작성하지는 않습니다. – Martin

0

은 사용으로 간주 있나요?

+0

예. "heroku rake clip : refresh CLASS = Attachment"가 작동하지 않습니다. "지정된 키가 없습니다."라는 메시지가 표시됩니다. – Martin

7

확실하지,하지만 당신은 프로덕션에서이를 실행하도록 지정해야 할 수도 있습니다 환경.

heroku rake paperclip:refresh CLASS=Attachment RAILS_ENV=production 
+1

안녕하세요, 재미 있습니다. 그건 나를 위해 그것을 해결하는 것 : +50,이 오래된 질문에 대한 답변 주셔서 감사합니다! – Andrew

+0

문제는 없지만 문제가 해결되었다고 생각합니다. – harald

1

이 오류는 개체 (키)가 S3에 더 이상 존재하지 않지만 데이터베이스에 해당 개체를 가리키는 레코드가 있음을 나타낼 수 있습니다. 이것은 누군가가 당신의 DB에있는 것들과 얽매이지 않는 S3 버킷을 변경 한 경우에만 발생합니다.

".exists?"를 사용할 수 있습니다. 메소드를 사용하여 Amazon의 서버에 키가 있는지 먼저 확인하십시오. 읽기 요청이 발행되지는 않습니다.

이 이런 식으로 재 처리 명령을 변경합니다 :

Attachment.all.each { |x| x.attachment.reprocess! if x.attachment.exists? }