重新生成大拇指时的回形针问题

时间:2011-03-04 00:11:05

标签: ruby-on-rails ruby ruby-on-rails-3

我正在尝试重新制作所有拇指。我不确定为什么说密钥不存在。我正确配置了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)应该是有效的图像文件有关。知道如何跳过它们吗?

5 个答案:

答案 0 :(得分: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 :(得分:7)

不确定您将密钥放在AWS-S3的哪个位置,但您可能必须指定要在生产环境下运行此密钥。

heroku rake paperclip:refresh CLASS=Attachment RAILS_ENV=production

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

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

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

这会将您的重新处理命令更改为以下内容:

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

答案 4 :(得分:0)

您是否考虑过使用:

rake paperclip:refresh

相反?