Я загружаю изображения с открытым -uri с удаленного веб-сайта и сохраняю их на своем локальном сервере в моем приложении Ruby on Rails. Большинство изображений показывались без проблем, но некоторые изображения просто не отображались.
После очень долгого сеанса отладки -я наконец узнал (благодаря этому сообщению в блоге ), что причина этого в том, что class Buffer
в открытом -uri -библиотека обрабатывает файлы размером менее 10 КБ как объекты ввода-вывода -, а не как временные файлы.
Мне удалось обойти эту проблему, следуя ответу Мики Винкельспехта на этот вопрос StackOverflow , где я поместил следующий код в файл в моих инициализаторах:
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
Пока это работает, как и ожидалось, но мне все время интересно, почему они вообще поместили этот код в библиотеку? Кто-нибудь знает конкретную причину,Почему файлы размером менее 10 КБ обрабатываются как StringIO?
Поскольку вышеприведенный код фактически сбрасывает это поведение глобально для всего моего приложения, я просто хочу убедиться, что ничего не нарушаю.