Я определенно опаздываю на вечеринку, но ...
Корень этой проблемы в том, что если вы используете open(url)
для файла размером менее 10 КБ, он автоматически преобразует его в строковый объект ввода-вывода вместо использования Tempfile. У объекта StringIO, как все указали, нет метода path
, определенного для него.
Значение по умолчанию (10 КБ) устанавливается постоянной StringMax
...
http://yard.ruby -doc.org / STDLIB-2.1.0 / OpenURI / Buffer.html
if defined?(OpenURI) && OpenURI::Buffer.const_defined?(StringMax)
OpenURI::Buffer.send('remove_const', StringMax)
OpenURI::Buffer.send('const_set', StringMax, 0)
end
Проблема штанги решена!
p.s. убедитесь, что вы используете #send, иначе вы не сможете получить доступ к методам #remove_const и #cont_set.
p.p.s. Я бы не советовал устанавливать его в ноль, если вы выполняете много небольших операций ввода-вывода, поскольку созданные временные файлы, вероятно, будут хуже, чем просто изменение кода для правильного использования StringIO. Все зависит от вашего варианта использования.