我使用 Carrierwave 进行图像上传,在我的表单中,我添加了一个用于缓存的隐藏字段,如文档中所述。
= form_for @user, html: {multipart: true} do |f|
%p
= f.label :image, "your image"
= f.file_field :image, id: "img"
= f.hidden_field :image_cache
但问题是上传图像并保存记录后,tmp 目录仍然包含所有临时/缓存文件。
有没有办法清理 tmp 目录?
我找到了这个帖子here但也不太明白,而且没有简单的例子解释
Edit
我尝试使用控制台运行此命令
CarrierWave.clean_cached_files!
它向我输出 tmp 目录中所有文件的数组,如下所示:
["/home/medBo/projects/my_project/public/uploads/tmp/1380732930-5006-6671","/home/medBo/projects/my_project/public/uploads/tmp/1380754280-4623-3698" ....
但是当我去查看发生了什么时,我发现所有文件仍然存在于 /tmp 中(未删除)
我尝试在上面的链接中阅读更多内容,我发现了一个特殊的考虑因素CarrierWave.clean_cached_files! :
特别注意事项
此方法会破坏定义了多个版本的上传器。
您的第一个版本将被保存,但之后清理代码将
运行并删除用于生成附加文件的 tmp 文件
版本。在这种情况下,您最好创建一个 rake 任务
定期清理 tmp 文件夹。
什么意思:“此方法会破坏具有多个版本的上传器”? (因为我在上传器类“拇指和大版本”中使用两个版本):
class ImageUploader < CarrierWave::Uploader::Base
# Include RMagick or MiniMagick support:
include CarrierWave::RMagick
# include CarrierWave::MiniMagick
# Choose what kind of storage to use for this uploader:
storage :file
# storage :fog
# Override the directory where uploaded files will be stored.
# This is a sensible default for uploaders that are meant to be mounted:
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
...
...
version :large do
resize_to_limit(600, 600)
end
version :thumb do
process :crop_image
resize_to_fill(100, 100)
end
...
...
end
我还尝试运行一个任务来查看 tmp/ 目录内的文件夹是否将被删除,但该任务不起作用:
task :delete_tmp_files do
FileUtils.rm_rf Dir.glob("#{Rails.root}/public/uploads/tmp/*")
end