Почему 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 ?
Поскольку приведенный выше код практически сбрасывает это поведение глобально для всего моего приложения, я просто хочу убедиться, что я не нарушаю ничего другого.