CarrierWave 在我接触过的很多个项目中使用,我时常会发现奇怪的问题,用 CarrierWave 实现的头像、封面图等会出现丢图的情况。
首先,这里不讨论 Cache 过期的策略
由于这些问题是偶尔发生,并且概率都非常小,所以之前我都一直忽略了,但是随着越来越多的系统里面出现类似的情况,最近我开始分析可能存在的原因。
CarrierWave 在 Model 的 callback 上面挂了:after_save :"remove_previously_stored_#{column}"
这会带来的问题:
所以,反过来想一下,真的需要删除老图片么?!是的,没必要,不缺那么点儿空间。
CarrierWave.configure do |config|
# 不要在上传新文件的时候,删除老文件
config.remove_previously_stored_files_after_update = false
end
参考 Ruby China 这个 Commit:
https://github.com/ruby-china/ruby-china/commit/ab932aa9beccd2ef4ce27c5e8d00c0b5c5457f81
我的建议已经合并到了 Carrierwave 里面 https://github.com/carrierwaveuploader/carrierwave/pull/1503/files