2011-03-04 43 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 

更新:我敢肯定它的相关的事实,有上传的文件,如热媒,应该是有效的图像文件。任何想法如何跳过他们?

+2

尝试添加一些日志信息,Attachment.all.each {| X | Rails.logger.error“我正在处理#{x.id}”; x.attachment.reprocess!}或简单的使用放入控制台。也许是缺少资产。 – andrea 2011-03-08 11:38:54

+0

我有完全相同的问题,一直没能弄清楚... – Andrew 2011-06-15 22:42:22

+0

马丁 - 哈拉尔的答案为我解决了它,你应该试试看,如果它对你有用,就给他答案。 – Andrew 2011-06-22 02:28:36

回答

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

祝您好运

1

我不知道你的验证是如何设置的,但有可能是一些附件对象可以有一个空白的附件?如果是这样,请尝试:

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

这是行不通的。它显示所有返回的对象,但不重建缩略图。 – Martin 2011-03-07 21:48:15

0

你有没有考虑过使用:

rake paperclip:refresh 

呢?

+0

是的。 “heroku rake回形针:刷新CLASS =附件”不起作用。它说“指定的密钥不存在”。 – Martin 2011-03-07 21:49:19

7

不知道,你已经把你的AWS-S3键,但您可能需要指定要在生产中运行这个环境。

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

嘿,有趣。这似乎解决了我:) +50,谢谢你回答这个老问题! – Andrew 2011-06-22 02:28:05

+0

没问题,很高兴听到它解决了你的问题! – harald 2011-06-23 09:33:47

1

此错误还可以指当S3上不再存在对象(键)但您的数据库中有指向它的记录时。这只有在有人对S3存储桶进行了更改时才会发生,这些存储桶不与您在数据库中存储的内容相关联。

如果是这种情况,您可以使用“.exists?”方法来检查该密钥是否存在于亚马逊服务器上,而不是发出读取请求。

这将改变你的再处理命令是这样的:

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