2013-04-22 5 views
1

Я использую Carrierwave, s3 и туман для загрузки видео. Я добавил файл file_size_validator, чтобы видео не превышало 5 МБ.rake aborted! Операция не разрешена - 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 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. 

running bundle install ничего не достигает.

Кто-нибудь знает, почему это происходит? это ошибка разрешений при попытке удалить эти папки? есть ли лучший способ справиться с tmp-файлами, которые не прошли проверку?

+0

привет @dodgerogers я думаю, что у меня есть аналогичная проблема :(но не уверен, что я должен делать, пожалуйста, можете посмотреть на мой вопрос здесь: http://stackoverflow.com/questions/19126504/cleanup -tmp-каталог с-carrierwave – medBo

ответ

2

Использование rm_rf вместо rm преодолевает ошибки разрешений и успешно удаляет папки.

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