【发布时间】:2012-05-16 20:01:05
【问题描述】:
我使用 open-uri 从远程网站获取图像,并将它们保存在我的 Ruby on Rails 应用程序中的本地服务器上。大多数图像显示没有问题,但有些图像没有显示。
经过很长的调试会话后,我终于发现(感谢this blogpost)这是因为open-uri-libary 中的class Buffer 将小于10kb 的文件视为IO 对象临时文件。
我按照 Micah Winkelspecht 对this StackOverflow question 的回答设法解决了这个问题,我将以下代码放入我的初始化程序的文件中:
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
到目前为止,这按预期工作,但我一直想知道,为什么他们首先将这段代码放入库中?有谁知道具体原因,为什么 10kb 以下的文件会被视为 StringIO ?
由于上述代码实际上为我的整个应用程序全局重置了此行为,我只想确保我没有破坏其他任何东西。
【问题讨论】:
标签: ruby standard-library