我正在尝试调试/诊断一些奇怪的行为,并希望有人可以为我提供一些见解。这是在Ruby 1.9.3中。
我们有一些代码可以打开上传的文件来确定其MIME类型,其归结为:
open(file) { |f| get_mime_type(f) }
非常简单。在这种情况下,文件实际上是一个File对象(或我们的测试套件中的Rack :: Test :: UploadedFile),而不是路径,但open
似乎可以正常使用文件对象。
...除了我们现在有一个团队的新成员,它不适合他。他的环境大部分以相同的方式设置(我能想到的任何相关内容都是相同的 - ruby版本和补丁级别,rails版本,已安装的宝石),但在他的机器上,当文件对象传递给{{1}时它返回一个文件对象并完全忽略该块。但是,传递路径而不是文件对象可以起作用:
open
所以这是我们的临时解决方案,但我想弄清楚的是为什么这种情况发生了?我很感激任何见解!
答案 0 :(得分:1)
我想弄清楚的是为什么会发生这种情况?
Kernel#open
的第一个参数是not supposed,可以使用File
个对象,而是使用代表路径的<{1}}对象。它适用于某些机器的事实并不能证明它是有效的,也不是建议使用String
的方法。
你一定要继续使用:
open