2012-10-09 67 views
31

Kullanıcıların web kamerasıyla profil resmini çekebilmeleri için JPEGCAM kullanıyorum.Hata iletmeden bir dosyayı nasıl silme hatası

def ajax_photo_upload  
    File.open(upload_path, 'w:ASCII-8BIT') do |f| 
    f.write request.raw_post 
    end 
    # @user.photo = File.open(upload_path) 
    @user.assign_attributes(
    :photo => File.open(upload_path), 
    :orig_filename => "#{current_user.full_name}.jpg" 
) 
    if @user.save 
    respond_to do |format| 
    ..... 
private 

    def upload_path # is used in upload and create 
    file_name = session[:session_id].to_s + '.jpg' 
    File.join(::Rails.root.to_s, 'public', 'temp', file_name) 
    end 

güvenle bu geçici dosya silme konusunda gitmek için en iyi yolu nedir: Bu şekilde geçici bir dosya yükler? Teşekkürler

cevap

19

Eğer işiniz bittiğinden eminseniz, neden sadece FileUtils.rm veya FileUtils.rm_f kullanıyorsunuz?

FileUtils.rm_f(upload_path)

http://www.ruby-doc.org/stdlib-1.9.3/libdoc/fileutils/rdoc/FileUtils.html#method-c-rm_f

Ayrıca Rails bu görmezden ve uyanır ve bu geçici dosyaları maç geçici dizinden bir günden daha eski dosyaları siler bir cron'u olabilir

. Bir dosya yeniden işlenemediğinde hata için bir miktar marjın avantajı vardır - bunu derhal yapmazsınız - ve dosya işlemi Rails için istek/yanıt döngüsünde yapılmaz, daha sonra biraz daha hızlı yanıt verir.

72

Eğer dosya ile yapılır biliyoruz olduğunda: Başka bir şey

File.delete(path_to_file) if File.exist?(path_to_file) 

: açtığınız her zaman yakın dosyalar, işletim sistemi sadece açık dosyaların belirli sayıda işleyebilir emin olun/dosya tanımlayıcıları ve yeni sekme sen hep ya blok formu kullanın Ruby dosyaları açmak istediğiniz ne zaman ... bu sınırı geçerken garip hatalar içine çalışabilir: Yakut için dosya otomatik olarak kapanacak

File.open(path) do |f| 
    # ... 
end 

ve sen. Blok formu kullanılabilir değilse, kendiniz dosyaları kapatmak zorunda:

f = File.open(path) 
# ... 
f.close 

Yani @user.assign_attributes(...) geçmek dosyayı kapatmak için emin olun ... yarış koşullarına

dikkatli
+0

çoklu iş parçacıklı veya çok olduğu app'ed ... – rogerdpack

İlgili konular