2011-04-06 38 views
1

为什么paperclip在将文件分配给附件时执行转换,而不是在调用保存时执行所有繁重的工作。回形针缩略图生成的时间

这似乎是它的坏:

ar_obj.attachment = File.open('...') 
#copy file to /tmp 
#styles.length.times do { identify & convert } 
ar_obj.save 
# copy original & thumbnails in place. 

我不知道这使多大意义可言。为什么试图转换 未经验证的附件?

例如:尝试连接一个10G的形象 - 它永远完成 即使你有一个验证的大小(比如< 5MB),因为10G 图像仍然重新加工成您的每个样式。它不是 ,直到调用保存才会添加错误。

一定有很好的理由,请赐教。

+0

你应该接受jyurek的回答。毕竟他写回形针。 – gtd 2011-04-08 04:38:45

回答

0

我不知道为什么这样做的确切原因,但我发现它也很奇怪。我通常通过使用DelayedPaperclip gem来解决这个问题,它将附件的处理推迟到DelayedJob worker。

https://rubygems.org/gems/delayed_paperclip

+0

不幸的是,这是不可行的。我需要处理后的图像来呈现下一页。虽然谢谢! – jsharpe 2011-04-06 18:05:47

1

它最初因为一个无效的图像(例如,如果你想上传一个MP3当你期待一个JPG)验证错误,并且需要被拯救,因此您可以显示之前发现给用户适当的错误。

即使对Rails中的大小进行验证,也意味着只要上传发生,连接就会保持打开状态。如果你真的想在这种情况下快速失败,你应该防止在Apache/Nginx级别进行大量上传。