内核#使用传入的File对象打开

时间:2013-06-04 21:11:48

标签: ruby

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

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

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

非常简单。在这种情况下,文件实际上是一个File对象(或我们的测试套件中的Rack :: Test :: UploadedFile),而不是路径,但open似乎可以正常使用文件对象。

...除了我们现在有一个团队的新成员,它不适合他。他的环境大部分以相同的方式设置(我能想到的任何相关内容都是相同的 - ruby​​版本和补丁级别,rails版本,已安装的宝石),但在他的机器上,当文件对象传递给{{1}时它返回一个文件对象并完全忽略该块。但是,传递路径而不是文件对象可以起作用:

open

所以这是我们的临时解决方案,但我想弄清楚的是为什么这种情况发生了?我很感激任何见解!

1 个答案:

答案 0 :(得分:1)

  

我想弄清楚的是为什么会发生这种情况?

Kernel#open的第一个参数是not supposed,可以使用File个对象,而是使用代表路径的<{1}}对象。它适用于某些机器的事实并不能证明它是有效的,也不是建议使用String的方法。

你一定要继续使用:

open