3

私はいくつかの奇妙な動作をデバッグ/診断しようとしており、誰かが私に洞察を与えてくれることを願っています. これは Ruby 1.9.3 にあります。

アップロードされたファイルを開いてその MIME タイプを特定するコードがいくつかあります。

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

かなり簡単です。この場合、ファイルは実際にはパスではなくファイル オブジェクト (または、テスト スイートでは Rack::Test::UploadedFile)openですが、ファイル オブジェクトで問題なく動作するようです。

... ただし、チームに新しいメンバーが加わり、彼のために機能していません。彼の環境はほとんど同じように設定されています (Ruby のバージョンとパッチレベル、Rails のバージョン、インストールされている gem など、私が考えることができる関連するものはすべて同じです) が、彼のマシンでは、ファイル オブジェクトが に渡されるとopen、 file オブジェクトを削除し、ブロックを完全に無視します。ただし、ファイル オブジェクトの代わりにパスを渡すと機能します。

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

これは私たちの一時的な修正ですが、私が理解しようとしているのは、なぜこれが起こっているのかということです? 洞察をいただければ幸いです。

4

1 に答える 1

1

私が理解しようとしているのは、なぜこれが起こっているのですか?

の最初の引数は、オブジェクトでKernel#openはなく、パス を表すオブジェクトで機能することになっています。一部のマシンで機能しているという事実は、それが有効であることの証明でも、推奨される使用方法でもありません。FileStringopen

あなたは間違いなく使い続ける必要があります:

open(file.path) { |f| get_mime_type(f) }
于 2013-07-18T18:24:20.440 に答える