Почему OpenURI рассматривает файлы размером менее 10 КБ как StringIO?

Я получаю изображения с open-uri с удаленного веб-сайта и сохраняю их на моем локальном сервере в моем приложении Ruby on Rails. Большинство изображений было показано без проблем, но некоторые изображения просто не отображались.

После очень долгой сессии отладки я наконец-то узнал (спасибоэтот пост) что причина в том, чтоclass Buffer воткрытой Ури libary обрабатывает файлы размером менее 10 КБ как объекты ввода-вывода вместо временных файлов.

Мне удалось обойти эту проблему, следуя ответу Мики Винкельспехта наэтот вопрос StackOverflowгде я помещаю следующий код в файл в моих инициализаторах:

<code>require 'open-uri'
# Don't allow downloaded files to be created as StringIO. Force a tempfile to be created.
OpenURI::Buffer.send :remove_const, 'StringMax' if OpenURI::Buffer.const_defined?('StringMax')
OpenURI::Buffer.const_set 'StringMax', 0
</code>

Пока это работает, как и ожидалось, но я продолжаю задаваться вопросом, почему они поместили этот код в библиотеку в первую очередь? Кто-нибудь знает конкретную причину,why files under 10kb in size get treated as StringIO ?

Поскольку приведенный выше код практически сбрасывает это поведение глобально для всего моего приложения, я просто хочу убедиться, что я не нарушаю ничего другого.

Ответы на вопрос(1)

Ваш ответ на вопрос