Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

download! method doesn't close file

Aperta
#518 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
45/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Ferma
Stack tecnologico
ruby
Ambito
devops

Direzione di ricerca

Inizia dall’implementazione di download! e segui come viene gestito Tempfile. Riproduci l’esempio di download/lettura sequenziale dell’issue, poi aggiungi o aggiorna la coverage per la lettura immediatamente dopo il download; il lavoro è completo quando la lettura vede sempre il contenuto completo senza che il chiamante chiuda il file.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

which causes hard-to-debug errors when you download many files in a row and try to read the file contents immediately after downloading. It works most of the time, but at some point a downloaded file will not be flushed to disk completely when you try to read the file.

Reading only the partially written file from disk will, of course, result in corrupted file contents. I was able to avoid this behavior by explicitly closing the downloaded file before reading it again. But this was not very intuitive, so please consider closing the file within the download method.

tmp_file = Tempfile.new(file_name, tmp_dir)
src = File.join(dir, file_name)
          
download! src, tmp_file, log_percent: -1

# it's important to close the tmp file, otherwise data might not be written 
# to disk already, when we try to read the file again
tmp_file.close 

begin
   File.read tmp_file
ensure
   tmp_file.close
   tmp_file.unlink
end

Lingua principale
Ruby
Stelle
1.2k
Fork
257
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di capistrano/sshkit

Tutte le issue di capistrano/sshkit

Issue simili

Altre issue su Ruby

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.