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