2011-04-06 68 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級別進行大量上傳。