耙子流产了! 操作不被允许 – Carrierwave删除validation失败的tmp文件

我正在使用Carrierwave,s3和fog来上传video。 我添加了一个file_size_validator文件,以便video不能大于5mb。

我对Carrierwave如何工作的理解(请告知是否不正确)。 Carrierwave将文件的副本保存到tmp文件文件夹,然后对其执行validation,如果通过则将文件上传到S3,下面的代码将从本地文件系统中删除tmp文件:

video_uploader.rb

before :store, :remember_cache_id after :store, :delete_tmp_dir def cache_dir Rails.root.join('public/uploads/tmp/videos') end # store! nil's the cache_id after it finishes so we need to remember it for deletion def remember_cache_id(new_file) @cache_id_was = cache_id end def delete_tmp_dir(new_file) # make sure we don't delete other things accidentally by checking the name pattern if @cache_id_was.present? && @cache_id_was =~ /\A[\d]{8}\-[\d]{4}\-[\d]+\-[\d]{4}\z/ FileUtils.rm_rf(File.join(root, cache_dir, @cache_id_was)) end end 

如果文件未通过validation,则不会调用before_store和after_store回调,并且tmp文件仍保留在tmp文件夹中,并且不会被删除。

在此处输入图像描述

所以我们必须自己处理删除这些文件(再次请告知是否有一种常见的方法来执行此操作)。 我创建了一个cron rake任务,删除与video相关的屏幕截图,工作正常,然后使用类似的格式删除这些临时文件和文件夹。 尝试运行任务时,我收到以下错误:

video.rake

 task :delete_tmp_files do FileUtils.rm Dir.glob("#{Rails.root}/public/uploads/tmp/screenshots/*") end task :carrierwave_tmp do CarrierWave.clean_cached_files! end task :delete_unsaved_videos do FileUtils.rm Dir.glob("#{Rails.root}/public/uploads/tmp/videos/*") end rake delete_unsaved_videos rake aborted! Operation not permitted - /user/me/projects/teebox_network/public/uploads/tmp/videos/20130421-1853-8808-1646 

用sudo运行rake(仅用于调试)会抛出这个。

 sudo bundle exec rake delete_unsaved_videos Could not find rake-10.0.4 in any of the sources Run `bundle install` to install missing gems. 

运行bundle install并没有实现任何目标。

有谁知道为什么会这样? 尝试删除这些文件夹是一个权限错误? 有没有更好的方法来处理validation失败的tmp文件?

使用rm_rf而不是rm克服了权限错误并成功删除了文件夹。

FileUtils.rm_rf Dir.glob("#{Rails.root}/public/uploads/tmp/videos/*")