Ensure İçinde Fırlatma (ARCH6155)
Anahtar ruby.logging.raise-in-ensure · Önem error · Kategori logging
ensure bloğu içinde istisna fırlatmak, begin gövdesinden gelen mevcut istisnayı maskeler ve gerçek hatayı kaybeder. Temizlik kodu hata fırlatmamalıdır.
Hatalı
Bölüm başlığı “Hatalı”def write(file) file.write(data)ensure raise "Akış kapatılamadı" unless file.closeenddef write(file) file.write(data)ensure begin file.close rescue => e Rails.logger.warn("Akış kapatılamadı", exception: e) endendDüzeltme
Bölüm başlığı “Düzeltme”ensure bloğundaki temizlik hatalarını yakalayıp loglayın; oradan istisna fırlatmayın.