Это проблема буферизации. Вам нужно сбросить буфер ввода-вывода на диск, прежде чем пытаться его прочитать. Либо file.close
(если вы закончили с этим), либо file.flush
до выполнения File.open
для чтения.
Обновление
Я не думал об этом, но вам не нужно открывать временный файл, чтобы просто прочитать его. Он уже открыт для записи и чтения , все, что вам нужно сделать, это искать начало файла перед чтением. Таким образом, вам не нужно делать сброс (потому что вы на самом деле читаете из буфера) ...
# starting partway into your code...
num_bytes_written = file.write(uri.read)
puts "Wrote #{num_bytes_written} bytes"
puts "No need to open #{file.path} >>"
puts "### BEGINNING OF FILE ###"
file.rewind # set the cursor to the start of the buffer
puts file.read # cursor is back at the end of the buffer now
puts "### END OF FILE ###"
Еще одно обновление
После комментария от @ carp я изменил приведенный выше код, чтобы использовать rewind
вместо seek 0
, потому что он также сбрасывает lineno
в 0
(и без этого, если вы использовали lineno
, это было бы очень сбивало с толку). Также на самом деле это более выразительное имя метода.