我使用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