我使用carrierwave进行图片上传,在我的表单中,我添加了一个隐藏字段来进行缓存,如文档中所述。用carrierwave清理tmp目录
= 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,但不能把它理解为好,并没有简单的例子来说明
编辑
我试图用控制台运行此命令
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
让我看看我能找到。 – jcm