Dlaczego OpenURI traktuje pliki o rozmiarze poniżej 10 KB jako StringIO?

Pobieram obrazy za pomocą open-uri ze zdalnej strony i zachowuję je na moim lokalnym serwerze w mojej aplikacji Ruby on Rails. Większość obrazów była wyświetlana bez problemu, ale niektóre obrazy po prostu nie były wyświetlane.

Po bardzo długiej sesji debugowania w końcu się dowiedziałem (dziękiten blogpost) powodem tego jest to, żeclass Buffer wopen-uri-libary traktuje pliki o rozmiarze mniejszym niż 10 KB jako obiekty IO zamiast plików tymczasowych.

Udało mi się obejść ten problem, podążając za odpowiedzią Micaha Winkelspechta nato pytanie StackOverflow, gdzie umieściłem następujący kod w pliku w moich inicjalizatorach:

<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>

Działa to zgodnie z oczekiwaniami, ale wciąż zastanawiam się, dlaczego w ogóle umieszczają ten kod w bibliotece? Czy ktoś zna konkretny powód,dlaczego pliki o rozmiarze poniżej 10 KB traktowane są jako StringIO?

Ponieważ powyższy kod praktycznie resetuje to zachowanie na całym świecie dla całej mojej aplikacji, chcę tylko upewnić się, że nie łamię niczego innego.

questionAnswers(1)

yourAnswerToTheQuestion