undefined method 'path' for #<StringIO...
に遭遇したため、解決した過程の忘備録です。
RubyでURLから画像などのファイルを開く場合、
OpenURI.open_uri('ファイルのURL')
で大抵は開けます。
で、この戻り値はTempfile
になるわけですが、ファイルが10kb以下だった場合にはStringIO
になっちゃうみたいです。
この10kbという数字はOpenURI::Buffer
にStringMax
という定数で定義されています。
なので、これを一時的に上書きすれば10kb以下のファイルでも対応できそうです。
OpenURI::Buffer.send('const_set', :StringMax, 0)
file = OpenURI.open_uri('10kb以下のファイルのURL')
file.class # => Tempfile
これで開くことができました。