Подтвердить что ты не робот

Ruby как писать в Tempfile

Я пытаюсь создать Tempfile и написать в него текст. Но я получаю это странное поведение в консоли rails

t = Tempfile.new("test_temp") # => #<File:/tmp/test_temp20130805-28300-1u5g9dv-0>
t << "Test data"              # => #<File:/tmp/test_temp20130805-28300-1u5g9dv-0>
t.write("test data")          # => 9
IO.read t.path                # => ""

Я также пробовал cat /tmp/test_temp20130805-28300-1u5g9dv-0, но файл пуст

Я что-то пропустил? Или как правильно писать на Tempfile?

FYI Я использую ruby ​​1.8.7 и rails 2.3.12

4b9b3361

Ответ 1

Вам захочется закрыть временный файл после его записи. Просто добавьте t.close в конец. Уверен, что файл имеет буферизованный вывод.

Ответ 2

Попробуйте это запустите t.rewind перед чтением

require 'tempfile'
t = Tempfile.new("test_temp")
t << "Test data"
t.write("test data") # => 9
IO.read t.path # => ""
t.rewind
IO.read t.path # => "Test datatest data"

Ответ 3

Стоит отметить, что вызов .rewind является обязательным, или любой последующий вызов .read просто возвращает пустое значение

Ответ 4

close или rewind будет фактически выписывать содержимое в файл. И вы можете удалить его после использования:

file = Tempfile.new('test_temp')
begin
  file.write <<~FILE
    Test data
    test data
  FILE
  file.close

  puts IO.read(file.path) #=> Test data\ntestdata\n
ensure
  file.delete
end