Ruby 内核#使用传入的文件对象打开

Ruby 内核#使用传入的文件对象打开,ruby,Ruby,我正在尝试调试/诊断一些奇怪的行为,希望有人能为我提供一些见解。这是在Ruby 1.9.3中实现的 我们有一些代码可以打开一个上传的文件来确定它的MIME类型,可以归结为: open(file){| f | get|u mime_type(f)} 很简单。在本例中,文件实际上是一个文件对象(或我们的测试套件中的Rack::Test::UploadedFile),而不是路径,但是open似乎可以很好地处理文件对象 。。。除了我们现在有了一个新的队员,这对他不起作用。他的环境大部分是以相同的方式设

我正在尝试调试/诊断一些奇怪的行为,希望有人能为我提供一些见解。这是在Ruby 1.9.3中实现的

我们有一些代码可以打开一个上传的文件来确定它的MIME类型,可以归结为:

open(file){| f | get|u mime_type(f)}
很简单。在本例中,文件实际上是一个文件对象(或我们的测试套件中的Rack::Test::UploadedFile),而不是路径,但是
open
似乎可以很好地处理文件对象

。。。除了我们现在有了一个新的队员,这对他不起作用。他的环境大部分是以相同的方式设置的(我能想到的任何相关内容都是相同的——ruby版本和patchlevel、rails版本、已安装的gems),但在他的机器上,当一个文件对象被传递到
open
,它返回一个文件对象并完全忽略该块。但是,传入路径而不是文件对象会起作用:

open(file.path){| f | get_mime_type(f)}
这是我们暂时的解决办法,但我想弄明白为什么会发生这种情况?我很感激你的洞察力

我想弄明白为什么会发生这种事

Kernel#open
的第一个参数是使用
文件
对象,而是使用表示路径的
字符串
对象。它在某些机器上工作的事实并不能证明它是有效的,也不能证明它是使用
open
的建议方法

您一定要继续使用:

open(file.path) { |f| get_mime_type(f) }

如果你确定他在1.9.3上,那么这真的很奇怪——你确定你在调用
Kernel#open
而不是某个本地方法吗?也许可以尝试通过添加
内核来确保这一点。
open()
的开头。是的,他肯定在1.9.3上,添加
内核也没什么区别!嗯,这听起来像是1)有人对内核进行了猴子补丁,或者2)实际的代码并没有完全“归结”到您所展示的内容。我现在当然想不出任何其他的可能性。不幸的是,两者都不是真的。新开发人员的本地机器上的代码库与其他开发人员的代码库完全相同,下面是实际代码:(对于这种特定情况,
check\u special
is nil)在其他情况下,
open
是否为他工作,如?