2013-04-22 92 views
1

我使用Carrierwave,s3和fog来上传视频。我添加了一个file_size_validator文件,以便视频不能大于5mb。rake中止!不允许操作 - Carrierwave删除验证失败的tmp文件

我对Carrierwave工作原理的理解(如果不正确,请告知)。 Carrierwave将文件保存到tmp文件文件夹的副本,然后所以如果通过,则文件被上传到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 

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

enter image description here

因此,我们必须处理删除这些文件我们自己(再次请指教,如果有这样做的常用方法)。我创建了一个cron rake任务,删除与视频相关的屏幕截图,这很好,然后使用类似的格式删除这些临时文件和文件夹。当试图运行我得到了以下错误的任务:

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(只用于调试)前抛出这个。

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. 

运行软件包安装不能实现任何功能。

有谁知道为什么会发生这种情况?试图删除这些文件夹时是否存在权限错误?有没有更好的方法来处理验证失败的tmp文件?

+0

喜@dodgerogers我想我有一个类似的问题:(但不知道我应该做的,请你能在我的问题看这里!http://stackoverflow.com/questions/19126504/cleanup -tmp目录与 - carrierwave – medBo 2013-10-03 13:56:43

回答

2

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

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

相关问题