Ответ 1
Вам захочется закрыть временный файл после его записи. Просто добавьте t.close
в конец. Уверен, что файл имеет буферизованный вывод.
Я пытаюсь создать 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
Вам захочется закрыть временный файл после его записи. Просто добавьте t.close
в конец. Уверен, что файл имеет буферизованный вывод.
Попробуйте это
запустите 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"
Стоит отметить, что вызов .rewind
является обязательным, или любой последующий вызов .read
просто возвращает пустое значение
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